[已解决]如何让list控件,对单击和双击事件分别进行响应?
本帖最后由 fenhanxue 于 2012-10-6 15:18 编辑小妹写的程序是这样的,有2个控件,分别是input和一个list
然后我想实现list的单击和双击事件:
1)单击事件:单击list上的任一行的文本时,input上显示“我只想单击时显示本段文字,双击时别闪现本段文字,怎么弄哦”
2 )双击事件:list上的任一行的文本时,被双击的这一行文本会发送到input上
尝试写了下面这段代码,发现可以得到结果,但是过程存在问题,就是对于 2)双击事件:
在我点了一下鼠标还没来得及点第二下的时候,“我只想单击时显示本段文字,双击时别闪现本段文字,怎么弄哦”这段文字会马上出现在input上
也就是说,整个双击过程,点下第一下鼠标,“我只想单击时显示本段文字,双击时别闪现本段文字,怎么弄哦”这段文字会先出现在input上,点第二下鼠标,被双击的这一行文本再出现在input上,
而我想要实现的,是整过双击过程,点下第一下鼠标,input上不要有任何反应,点第二下鼠标,被被双击的这一行文本再出现在input上。不知道我的代码出错在哪里,求高手指点哦,感觉逻辑很混乱,哎
也就是说,我发现我的这段代码,好像双击事件,包含了单击事件,也就是如果我执行双击事件,他会先执行单击事件,再执行双击事件,
但我想实现的是,单击的时候只执行单击事件,双击的时候,只执行双击事件,求助哦
代码如下:#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WindowsConstants.au3>
Global Const $STN_DBLCLK = 2
Global Const $STN_SIGCLK = 1
$Form1 = GUICreate("Form1", 362, 269, 262, 158)
$Input1 = GUICtrlCreateInput("Input1", 8, 8, 137, 50)
$List1 = GUICtrlCreateList("", 160, 0, 193, 253)
GUICtrlSetData($List1, "123")
GUICtrlSetData($List1, "345")
GUICtrlSetData($List1, "789")
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
Local $nNotifyCode = BitShift($wParam,16)
Local $nID = BitAND($wParam, 0xFFFF)
Local $hCtrl = $lParam
Switch $nID
Case $List1
Switch $nNotifyCode
Case $STN_DBLCLK
GUICtrlSetData ( $Input1 , GUICtrlRead($List1))
Case $STN_SIGCLK
GUICtrlSetData($Input1,"我只想单击时显示本段文字,双击时别闪现本段文字,怎么弄哦")
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)
Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
If @error Then Return $GUI_RUNDEFMSG
$IDFrom = DllStructGetData($tagNMHDR, 2)
$Event = DllStructGetData($tagNMHDR, 3)
$tagNMHDR = 0
Switch $IDFrom;选择产生事件的控件
Case $ListView2
Switch $Event; 选择产生的事件
Case $NM_CLICK ; 左击
;~ Case $NM_DBLCLK ; 双击
;~ $Index = _GUICtrlListView_GetSelectedIndices($ListView1)
;~ If Not StringLen($Index) Then; 这里用以判断是否选定了ListViewItem
;~ MsgBox(0, "", "未选定")
;~ Return
;~ EndIf
;~ MsgBox(0, 0, _GUICtrlListView_GetItemText($ListView1, Number($Index), 0))
;~ Case $NM_RCLICK ; 右击
;~ ...
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY 不知道是不是真的小妹?如果是真小妹,哥马上给你搞定! 发现MM,当然得帮咯{:face (88):}
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WindowsConstants.au3>
Global Const $STN_DBLCLK = 2
Global Const $STN_SIGCLK = 1
$Form1 = GUICreate("Form1", 362, 269, 262, 158)
$Input1 = GUICtrlCreateInput("Input1", 8, 8, 137, 50)
$List1 = GUICtrlCreateList("", 160, 0, 193, 253)
GUICtrlSetData($List1, "123")
GUICtrlSetData($List1, "345")
GUICtrlSetData($List1, "789")
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
Local $nNotifyCode = BitShift($wParam,16)
Local $nID = BitAND($wParam, 0xFFFF)
Local $hCtrl = $lParam
Switch $nID
Case $List1
Switch $nNotifyCode
Case $STN_DBLCLK
ondblclick()
Case $STN_SIGCLK
onclick()
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func ondblclick()
Assign("isdblclick", True, 2)
; 下面放需要执行的东东
GUICtrlSetData($Input1 , GUICtrlRead($List1))
EndFunc
Func onclick($call = 1)
If IsDeclared("call") Then Return AdlibRegister("onclick",100)
Local $dblclick = Eval("isdblclick")
Assign("isdblclick", False, 2)
AdlibUnRegister("onclick")
; 如果是双击,则不操作,返回
If $dblclick Then Return
; 下面放需要执行的东东
GUICtrlSetData($Input1,"我只想单击时显示本段文字,双击时别闪现本段文字,怎么弄哦")
EndFunc
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY");注册双击消息函数
Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam);双击事件
Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
If @error Then Return $GUI_RUNDEFMSG
$IDFrom = DllStructGetData($tagNMHDR, 2)
$Event = DllStructGetData($tagNMHDR, 3)
$tagNMHDR = 0
Switch $IDFrom
Case $list1 ;选择产生事件的控件
Switch $Event; 选择产生的事件
Case $NM_CLICK ; 左击
;你的代码
Case $NM_DBLCLK ; 双击
;你的代码
Case $$NM_RCLICK ;右键
;你的代码
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
回复 4# drunk
哇,真的可以拉{:face (411):}
谢谢谢谢谢谢拉,哇哈哈
绿色风 发表于 2012-10-6 13:17 http://www.autoitx.com/images/common/back.gif
谢谢GG哦,太感激呢,学习了好多~ 回复 2# Azura
谢谢亲哦~学习了~ 学习了~!!!!
页:
[1]