找回密码
 加入
搜索
查看: 3068|回复: 7

[AU3基础] [已解决]一个FROM 两个 LISTVIEW 如何判断双击事件..

  [复制链接]
发表于 2012-8-22 01:38:25 | 显示全部楼层 |阅读模式
本帖最后由 kk_lee69 于 2012-8-22 21:49 编辑

一个FROM 两个 LISTVIEW 如何判断双击事件..有查过..不过我写不出来所以求助
寫出來 都會變成判斷成第一個 LISTVIEW


#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GUIListView.au3>
 
$Form1 = GUICreate("Form1", 800, 600)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
 
$ListView1 = GUICtrlCreateListView("||", 8, 8, 300, 200)
GUISetState(@SW_SHOW)
For $I = 1 To 10
        GUICtrlCreateListViewItem($I, $ListView1)
Next
 

$ListView2 = GUICtrlCreateListView("||", 350, 250, 200, 200)
GUISetState(@SW_SHOW)
For $I = 1 To 5
        GUICtrlCreateListViewItem($I, $ListView2)
Next

 
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
 
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
        Select ;$IDFrom;選擇產生事件的控制項
                
                Case $ListView1
 
                        Switch $Event; 選擇產生的事件
                                
                                Case $NM_CLICK ; 左擊
;~                                      ...
                                        
                        Case $NM_DBLCLK ; 雙擊
                            MsgBox(0,"A","A")
                                   $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
 
               
                           Case $ListView2
 
                        Switch $Event; 選擇產生的事件
                                
                                Case $NM_CLICK ; 左擊
;~                                      ...
                                        
                        Case $NM_DBLCLK ; 雙擊
                                MsgBox(0,"B","B")
                                $Index2 = _GUICtrlListView_GetSelectedIndices($ListView2)
                                If Not StringLen($Index2) Then; 這裏用以判斷是否選定了ListViewItem
                                MsgBox(0, "", "未選定")
                                Return
                                EndIf
                                MsgBox(0,0, _GUICtrlListView_GetItemText($ListView2, Number($Index2), 0))
                                        
                                Case $NM_RCLICK ; 右擊
;~                                      ...
                        EndSwitch


        EndSelect
        
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
发表于 2012-8-22 11:58:42 | 显示全部楼层
Case $ListView1, $ListView2
试试吧,没测
 楼主| 发表于 2012-8-22 13:06:56 | 显示全部楼层
本帖最后由 kk_lee69 于 2012-8-22 13:08 编辑

回复 2# netegg


    我就是這樣寫的  原本是

SWITCH $IDFrom;選擇產生事件的控制項

        CASE LISTVIEW1




        CASE LISTVIEW2


ENDSWITCH

這樣會出錯....

改成

Select

        CASE LISTVIEW1




        CASE LISTVIEW2


EndSelect

這樣又變成 兩個 LISTVIEW 都可以雙擊  但是只會跑 LISTVIEW1 的雙擊事件內容

http://www.autoitx.com/forum.php ... view%2B%CB%AB%BB%F7
這裡的文章 有提到 解法  但是只說了一句 用 Select  但是我實在搞不出來 呵呵
发表于 2012-8-22 13:13:32 | 显示全部楼层
Select

         CASE $IDFrom=$LISTVIEW1
发表于 2012-8-22 13:13:45 | 显示全部楼层
重复了,编辑之
 楼主| 发表于 2012-8-22 13:42:27 | 显示全部楼层
回复 4# 298311657

執行後出現....

CASE $IDFrom=$LISTVIEW2
CASE $IDFrom=^error
发表于 2012-8-22 14:42:41 | 显示全部楼层
本帖最后由 netegg 于 2012-8-22 14:49 编辑

switch $idfrom
    case $list1, $list2


Return是干什么的,返回到什么地方?

$Listview怎么确定的是句柄?
 楼主| 发表于 2012-8-22 17:26:18 | 显示全部楼层
回复 7# netegg

解決了....多謝 蛋大 的提示.......
老實說我也搞不太懂 程式是怎麼確定句柄的.....這個是我看 下面的文章變化而來的

    http://www.autoitx.com/forum.php ... hlight=%CB%AB%BB%F7

終於 弄出來了 程式 如下:

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GUIListView.au3>
 
$Form1 = GUICreate("Form1", 800, 600)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
 
$ListView1 = GUICtrlCreateListView("||", 8, 8, 300, 200)
;GUISetState(@SW_SHOW)
For $I = 1 To 10
        GUICtrlCreateListViewItem($I, $ListView1)
Next
 
 
$ListView2 = GUICtrlCreateListView("||", 350, 250, 200, 200)
GUISetState(@SW_SHOW)
For $I = 1 To 5
        GUICtrlCreateListViewItem($I, $ListView2)
Next
 
 
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
 
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 $IDFrom=$ListView1
 
                        Switch $Event; 選擇產生的事件
                                
                                                        Case $NM_CLICK ; 左擊
;~                                      ...
                                        
                                                        Case $NM_DBLCLK ; 雙擊
                                                                ;MsgBox(0,"A","A")
                                                                $Index = _GUICtrlListView_GetSelectedIndices($ListView1)
                                                                If Not StringLen($Index) Then; 這裏用以判斷是否選定了ListViewItem
                                                                        MsgBox(0, "", "未選定")

                                                                EndIf
                                                                MsgBox(0,0, _GUICtrlListView_GetItemText($ListView1, Number($Index), 0))
                                        
                                                        Case $NM_RCLICK ; 右擊
;~                                      ...
                        EndSwitch
 
              
                                Case $IDFrom=$ListView2
 
                       Switch $Event; 選擇產生的事件
                               
                                                        Case $NM_CLICK ; 左擊
;~                                      ...
                                        
                                                        Case $NM_DBLCLK ; 雙擊
                               ;MsgBox(0,"B","B")
                              $Index2 = _GUICtrlListView_GetSelectedIndices($ListView2)
                               If Not StringLen($Index2) Then; 這裏用以判斷是否選定了ListViewItem
                                                                        MsgBox(0, "", "未選定")
                                EndIf
                                MsgBox(0,0, _GUICtrlListView_GetItemText($ListView2, Number($Index2), 0))
                                        
                                                        Case $NM_RCLICK ; 右擊
;~                                      ...
                       EndSwitch
                         
        EndSwitch
        

EndFunc   ;==>WM_NOTIFY

评分

参与人数 1金钱 +25 收起 理由
502762378 + 25

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-30 01:32 , Processed in 0.083089 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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