zqjares 发表于 2018-10-20 15:06:17

如何 Case批量生成的button控件


各位好,今天想请教下关于如何case批量生成button的问题,如源码
尝试过的方法:之前有看到过A大发表关于 鼠标移动上去 标签控件变色的的方法。 AdlibRegister + GUIGetCursorInfo 实现,所以抄了一下,发现不行。不知道如何在 Case上写表达式。当我鼠标移动上去之后,通过 返回的元素 我能知道当前我鼠标位置上的控件的ID,再然后思路就断了。


目前主要难点: 不会使用case 涵盖所有这样的Button。 若Case $Button[$i] 也只能是最后一个 $i 生成的button有用。


想要达到的目的: 我点击每一个button 都能执行相同的操作, 比如点击任意一个button都显示 Msgbox(0,0,1)

还请有遇到过类似情况的前辈指点。


#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 437, 192, 124)
Local $Button
Local $i =1
Do
$Button[$i] = GUICtrlCreateButton("Button1", 312, 68+40*$i, 105, 25)
$i +=1
Until $i = 9
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd


afan 发表于 2018-10-20 16:39:17

zqjares 发表于 2018-10-20 16:27
感谢A大的指导,非常有用,但是也存在了问题。把难度升级一下, 我也是第一次知道Case可以 加to ,我理解 ...

用事件模式,更简单
Opt('GUIOnEventMode', 1)

GUICreate('', 400)
GUISetOnEvent(-3, '_Exit')
Local $Button, $Checkbox, $i = 1
For $i = 1 To 8
        $Button[$i] = GUICtrlCreateButton('Button ' & $i, 50, 5 + 40 * $i, 120, 25)
        GUICtrlSetOnEvent(-1, '_Test')
        $Checkbox[$i] = GUICtrlCreateCheckbox('Button ' & $i, 250, 5 + 40 * $i, 120, 25)
Next
GUISetState(@SW_SHOW)

While 1
        Sleep(1000)
WEnd

Func _Exit()
        Exit
EndFunc   ;==>_Exit
Func _Test()
        MsgBox(0, '', GUICtrlRead(@GUI_CtrlId))
EndFunc   ;==>_Test

afan 发表于 2018-10-20 15:14:22

GUICreate('', 220)
Local $Button, $i = 1
Do
      $Button[$i] = GUICtrlCreateButton('Button ' & $i, 50, 5 + 40 * $i, 120, 25)
      $i += 1
Until $i = 9
GUISetState(@SW_SHOW)

While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
                Case -3
                        Exit
                Case $Button To $Button
                        MsgBox(0, '', GUICtrlRead($nMsg))
      EndSwitch
WEnd

zqjares 发表于 2018-10-20 16:27:12

afan 发表于 2018-10-20 15:14
GUICreate('', 220)
Local $Button, $i = 1
Do


感谢A大的指导,非常有用,但是也存在了问题。把难度升级一下, 我也是第一次知道Case可以 加to ,我理解为这样的话就是 比如 控件范围是 10~49那么这其中的所有控件都受控制。而不仅限于 Button控件。
如修改过后的 源码:这样子 Checkbox的控件也会执行跟 button一样的动作,可否只有button控件执行呢。

GUICreate('', 400)
Local $Button, $i = 1
Local $Checkbox, $i = 1
Do
      $Button[$i] = GUICtrlCreateButton('Button ' & $i, 50, 5 + 40 * $i, 120, 25)
                $Checkbox[$i] = GUICtrlCreateCheckbox('Button ' & $i, 250, 5 + 40 * $i, 120, 25)
      $i += 1
Until $i = 9
GUISetState(@SW_SHOW)

While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
                Case -3
                        Exit
                Case $Button To $Button
                        MsgBox(0, '', GUICtrlRead($nMsg))
      EndSwitch
WEnd

heroxianf 发表于 2018-10-23 23:39:33

可以搜索A大的文章,有一个批量按钮自动排列创建的帖子。
页: [1]
查看完整版本: 如何 Case批量生成的button控件