找回密码
 加入
搜索
查看: 2681|回复: 5

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

  [复制链接]
发表于 2014-11-14 18:21:20 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 2014-11-14 18:42:19 | 显示全部楼层
用消息做就行了。。。
发表于 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
发表于 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? ... 1%BF%2B%BF%D8%BC%FE
 楼主| 发表于 2014-11-14 23:42:47 | 显示全部楼层
回复 4# user3000


   明白了,多谢啦,Assign 和 GUICtrlSetOnEvent 这2个函数帮了大忙
发表于 2014-11-15 01:24:42 | 显示全部楼层
回复 4# user3000
其实怎么说呢,也不是一点用没有,可以做个下棋的游戏
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 10:37 , Processed in 0.357858 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表