找回密码
 加入
搜索
查看: 17226|回复: 29

[AU3基础] [已解决] ListView 加上 CheckBox 风格后…CheckBox 如何变成单选的…

 火.. [复制链接]
发表于 2012-8-27 01:15:01 | 显示全部楼层 |阅读模式
本帖最后由 kk_lee69 于 2012-9-1 02:48 编辑

ListView 加上 CheckBox 风格后…CheckBox 如何变成单选的….
也就是說  選了一個項目後 CheckBOX 要打勾 然後 變成藍色高亮

如果換了項目 checkbox 的 打勾也要跟著換   只能單選

而把 checkbox 打勾後  項目要出現選定的藍色高亮......

能將這兩者 掛鉤在一起嗎??


感謝 蛋大 的 幫忙 完成了代碼~~~~今將代碼範例 整理如下:


#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GUIListView.au3>
#include <Array.au3>


$Form1 = GUICreate("Form1", 800, 600)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")


Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE,$LVS_EX_CHECKBOXES,$LVS_EX_SIMPLESELECT)
Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES,  $LVS_EX_DOUBLEBUFFER,$LVS_EX_CHECKBOXES,$LVS_EX_SIMPLESELECT)


 
$ListView1 = GUICtrlCreateListView("A      |B     |", 8, 8, 300, 200, -1, $iExWindowStyle)
GUISetState(@SW_SHOW)
For $I = 1 To 10
        GUICtrlCreateListViewItem($I, $ListView1)
Next

$hListView = GUICtrlGetHandle($Listview1)
  
 _GUICtrlListView_SetExtendedListViewStyle($ListView1, $iExListViewStyle)

 
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE



Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        #forceref $hWnd, $iMsg, $iwParam
        Local $tNMHDR, $hWndFrom, $iCode

        $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)  ; $tagNMHDR - Contains information about a notification message
        $hWndFrom = DllStructGetData($tNMHDR, 'hWndFrom')
        $iCode = DllStructGetData($tNMHDR, 'Code')

        Switch $hWndFrom
                Case GuiCtrlGetHandle($ListView1)
                        Switch $iCode
                                Case $NM_CLICK ; Sent by a list-view control when user clicks an item with left mouse button
                                        Local $aHit = _GUICtrlListView_HitTest($hListView)
                                        If $aHit[5] Then _GUICtrlListView_ClickItem($hListView, $aHit[0])
                                        If $aHit[0] <> -1 Then
                                                $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)  
                                                Local $Index = DllStructGetData($tInfo, "Index")
                                                _GUICtrlListView_SetItemChecked($hListView, -1, False)
                                                _GUICtrlListView_SetItemChecked($hListView, $Index)
                                        Else
                                                _GUICtrlListView_SetItemChecked($hListView, -1, False)
                                        EndIf
                                                                        
                        EndSwitch
        EndSwitch
EndFunc
 楼主| 发表于 2012-8-29 12:00:03 | 显示全部楼层
自己可恥的推一下 @@
发表于 2012-8-29 13:38:14 | 显示全部楼层
我晕了,繁体字、几个打钩。
 楼主| 发表于 2012-8-29 17:48:47 | 显示全部楼层
利用 P版 的 ListView 擴展消息   只能做出一半 ......@@

                                        
        Case $LVN_SELCHANGED ; 所選條目已經改變。
                Local $tChanged, $iItem, $iPreviousItem, $iFlags, $sFlags = "Left"

                $tChanged = DllStructCreate($tagLISTVIEW_SELCHANGED, $ilParam)
                $iItem = DllStructGetData($tChanged, "CurrentItem") ; 當前所選。
                $iPreviousItem = DllStructGetData($tChanged, "PreviousItem") ; 之前所選。
                $iFlags = DllStructGetData($tChanged, "ChangeFlags") ; 選擇標識。
                If ($iFlags = $LVCF_RBUTTON) Then $sFlags = "Right"

                _GUICtrlStatusBar_SetText($hStatusBar, "Current: " & $iItem, 0)
                _GUICtrlStatusBar_SetText($hStatusBar, "Previous: " & $iPreviousItem, 1)
                _GUICtrlStatusBar_SetText($hStatusBar, "Flags: " & $sFlags & " Button", 2)
                                ;_GUICtrlListView_SetItemChecked($hListView,$iItem)
                                _GUICtrlListView_SetItemChecked($hListView,$iItem)
                                _GUICtrlListView_SetItemChecked($hListView,$iPreviousItem,0)
                                ;_GUICtrlListView_SetItemSelected($hListView,$iItem,1,1)
                                ;_GUICtrlListView_SetItemSelected($hListView,$iPreviousItem,0,0)

发表于 2012-8-30 12:42:31 | 显示全部楼层
跟踪中。。。备留。。。肯定有用
发表于 2012-8-31 14:40:21 | 显示全部楼层
看了老半天,还是不懂意思
可有图解说?
 楼主| 发表于 2012-8-31 15:25:56 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-8-31 18:47:05 | 显示全部楼层
[au3].....
Case $NM_CLICK ; 鼠标左键点击项目时由控件发送
      $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
       Local $Index  = DllStructGetData($tInfo, "Index")
       _GUICtrlListView_SetItemChecked($hListView, -1, False)
       _GUICtrlListView_SetItemChecked($hListView, $Index)
------
[/au3]
发表于 2012-8-31 22:31:53 | 显示全部楼层
有点看不懂,围观一下...
 楼主| 发表于 2012-8-31 23:08:52 | 显示全部楼层
回复 9# netegg

感謝 蛋大的代碼...這點就是我上面說的 只能做一半.... 因為  當你點選CHECKBOX 並不會自動選取項目.....CHECKBOX 還是複選..... 簡單的說 我想做到的是  不管你點哪裡 項目也好 CHECKBOX 也好.....只允許單選  然後要設為選中高亮 跟 打勾
发表于 2012-8-31 23:14:09 | 显示全部楼层
本帖最后由 netegg 于 2012-9-1 00:57 编辑

回复 kk_lee69

不太理解你的意思了,不是复选框实现单选效果的意思吗?

是要点击复选框的时候实现选取?
 楼主| 发表于 2012-8-31 23:36:34 | 显示全部楼层
回复 12# netegg

上面的 的程式 當我點選 LISTVIEW 上面5號的位置的時候 會自動幫我打勾 CHECKBOX 這點沒問題......

但是 當我 不去點選5 而是 直接到5的前面去打勾 的時候.....並不會幫我自動把5 Selected

不過 剛剛在回答這個問題的時候 我再度CHECK 了一下 應該 只差在 選取而已
 楼主| 发表于 2012-8-31 23:41:21 | 显示全部楼层
回复 12# netegg

上面的 的程式 當我點選 LISTVIEW 上面5號的位置的時候 會自動幫我打勾 CHECKBOX 這點沒問題......

但是 當我 不去點選5 而是 直接到5的前面去打勾 的時候.....並不會幫我自動把5 Selected

不過 剛剛在回答這個問題的時候 我再度CHECK 了一下 應該 只差在 選取而已

加上這行之後  點 CHECKBOX  會自動選取  但是卻不會 打勾
_GUICtrlListView_SetItemSelected($ListView1,$Index)

不過 有點卡卡的....好像打勾沒有很順呢?? 是不是因為 抓取的 單擊事件的關係
发表于 2012-9-1 00:58:07 | 显示全部楼层
上面那段代码里如下加个子函数,再试试

[au3]Func _ListView_Click()
    Local $aHit
    $aHit = _GUICtrlListView_HitTest($hListView)
    If $aHit[4] Then
        _GUICtrlListView_clickitem($hListView, $aHit[0])
    EndIf
EndFunc   ;==>_ListView_Click
[/au3]
 楼主| 发表于 2012-9-1 01:19:19 | 显示全部楼层
回复 15# netegg

點擊效果 變順很多 但是  想要的單選效果 變不見了.....



我看過 P版的 擴展樣式那個 UDF  .... 上面的 ITEM 改變事件  資料的結構上....有 目前選取的  有 上次選取的...

但是 CHECKBOX 改變事件上 只有當前的....所以...一直搞不出來@@

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

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

本版积分规则

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

GMT+8, 2024-5-2 10:04 , Processed in 0.091838 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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