fenhanxue 发表于 2014-11-14 18:21:20

单击控件A会自动生成控件B,如何让控件B再对鼠标的单击事件作出相应?【已解决】

本帖最后由 fenhanxue 于 2015-11-12 03:19 编辑

比如我的窗口,一开始,只有button1,单击他,会自动生成button2,
我想实现的效果是,我再鼠标单击button2,会再生成button3
单击button3,会再生成button4
单击button4,会再生成button5
.......
单击button(N-1),会再生成buttonN
(无穷无尽。。。。)

不知道函数应该怎么写?

我只会写到button1创建2,2创建3就不会了。。。求指点啊。。。#include <ButtonConstants.au3>

#include <GUIConstantsEx.au3>

Dim $Button3

$Form = GUICreate("Form1", 623, 96, 330, 147)

$Button1 = GUICtrlCreateButton("创建2", 1, 1, 48, 25)


GUISetState(@SW_SHOW)


While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                  Case $GUI_EVENT_CLOSE
                          Exit
                  Case $Button1
                                $Button2 = GUICtrlCreateButton("创建3", 50, 1, 48, 25)

        EndSwitch
WEnd

netegg 发表于 2014-11-14 18:42:19

用消息做就行了。。。

afan 发表于 2014-11-14 19:12:42

仅针对提问描述Dim $Button1, $i = 0, $x = 50
GUICreate('Form1', 623, 96)
$Button1 = GUICtrlCreateButton('创建2', 1, 1, 48, 25)
GUISetState()
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $Button1
                        $i += 1
                        $Button1 = GUICtrlCreateButton('创建' & $i + 1, $i * $x, 1, 48, 25)
        EndSwitch
WEnd

user3000 发表于 2014-11-14 19:15:54

回复 1# fenhanxue

这样做有什么意义?我觉得除了对研究窗体编程的批量创建控件有点作用外,没什么用了吧?!

#include <WindowsConstants.au3>

Local $iSeq = 0
Local $iNumber = 11 ;每行按钮数量
Local $iSpacingX = 50, $iSpacingY = 30 ;垂直、水平,间距
$Form = GUICreate("test", 623, 296, 330, 147, BitOR($GUI_SS_DEFAULT_GUI, $WS_VSCROLL))
Assign('button' & $iSeq, GUICtrlCreateButton("创建2", 25, 25, 48, 25))

GUISetState(@SW_SHOW)
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case 3 To 9999;点击窗口内任一控件
                        If StringRegExp(GUICtrlRead($nMsg), '^创建\d+$') Then ; 只响应"创建."
                        If IsHWnd(GUICtrlGetHandle($nMsg + 1)) Then ContinueLoop; 不重复创建
                        $iSeq += 1
                        Assign('button' & $iSeq, GUICtrlCreateButton("创建" & ($iSeq + 2), $iSpacingX * Mod($iSeq, $iNumber) + 25, $iSpacingY * Floor($iSeq / $iNumber) + 25, 50, 25))
                        EndIf
        EndSwitch
WEnd


有兴趣还可以移步此帖作进一步研究. 水木子版主就是用的消息模式弄出来的.
http://61.153.183.105/forum.php?mod=viewthread&tid=33380&highlight=%C5%FA%C1%BF%2B%BF%D8%BC%FE

fenhanxue 发表于 2014-11-14 23:42:47

回复 4# user3000


   明白了,多谢啦,Assign 和 GUICtrlSetOnEvent 这2个函数帮了大忙

netegg 发表于 2014-11-15 01:24:42

回复 4# user3000
其实怎么说呢,也不是一点用没有,可以做个下棋的游戏
页: [1]
查看完整版本: 单击控件A会自动生成控件B,如何让控件B再对鼠标的单击事件作出相应?【已解决】