[已解决] ListView 加上 CheckBox 风格后…CheckBox 如何变成单选的…
本帖最后由 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 Then _GUICtrlListView_ClickItem($hListView, $aHit)
If $aHit <> -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
自己可恥的推一下 @@ 我晕了,繁体字、几个打钩。 利用 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)
跟踪中。。。备留。。。肯定有用 看了老半天,还是不懂意思
可有图解说? .....
Case $NM_CLICK ; 鼠标左键点击项目时由控件发送
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $Index= DllStructGetData($tInfo, "Index")
_GUICtrlListView_SetItemChecked($hListView, -1, False)
_GUICtrlListView_SetItemChecked($hListView, $Index)
------
有点看不懂,围观一下... 回复 9# netegg
感謝 蛋大的代碼...這點就是我上面說的 只能做一半.... 因為當你點選CHECKBOX 並不會自動選取項目.....CHECKBOX 還是複選..... 簡單的說 我想做到的是不管你點哪裡 項目也好 CHECKBOX 也好.....只允許單選然後要設為選中高亮 跟 打勾 本帖最后由 netegg 于 2012-9-1 00:57 编辑
回复 kk_lee69
不太理解你的意思了,不是复选框实现单选效果的意思吗?
是要点击复选框的时候实现选取? 回复 12# netegg
上面的 的程式 當我點選 LISTVIEW 上面5號的位置的時候 會自動幫我打勾 CHECKBOX 這點沒問題......
但是 當我 不去點選5 而是 直接到5的前面去打勾 的時候.....並不會幫我自動把5 Selected
不過 剛剛在回答這個問題的時候 我再度CHECK 了一下 應該 只差在 選取而已 回复 12# netegg
上面的 的程式 當我點選 LISTVIEW 上面5號的位置的時候 會自動幫我打勾 CHECKBOX 這點沒問題......
但是 當我 不去點選5 而是 直接到5的前面去打勾 的時候.....並不會幫我自動把5 Selected
不過 剛剛在回答這個問題的時候 我再度CHECK 了一下 應該 只差在 選取而已
加上這行之後點 CHECKBOX會自動選取但是卻不會 打勾
_GUICtrlListView_SetItemSelected($ListView1,$Index)
不過 有點卡卡的....好像打勾沒有很順呢?? 是不是因為 抓取的 單擊事件的關係 上面那段代码里如下加个子函数,再试试
Func _ListView_Click()
Local $aHit
$aHit = _GUICtrlListView_HitTest($hListView)
If $aHit Then
_GUICtrlListView_clickitem($hListView, $aHit)
EndIf
EndFunc ;==>_ListView_Click
回复 15# netegg
點擊效果 變順很多 但是想要的單選效果 變不見了.....
我看過 P版的 擴展樣式那個 UDF.... 上面的 ITEM 改變事件資料的結構上....有 目前選取的有 上次選取的...
但是 CHECKBOX 改變事件上 只有當前的....所以...一直搞不出來@@
页:
[1]
2