Hi,
Ich verwende die WM_NOTIFY message "TVN_SELCHANGEDW" um bei Änderung eines TreeView-Items eine beliebige Aktion durchzuführen. In meinem Beispiel eine MsgBox.
Das Problem: Wird das Item mittels Tasteneingaben geändert, erscheint die MsgBox einmal. Wird das Item mittels linker Maustaste verändert, erscheint die MsgBox zweimal.
Wie kann ich diese doppelte Ausführung verhindern?
Danke schonmal für Eure Vorschläge.
folgender Code:
C
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <listviewconstants.au3>
#include <GUITreeView.au3>
#region - GUI Create
GUICreate('treeview',550,400)
$TreeView1=GUICtrlCreateTreeView(10,10,200,380)
$hTreeView = GUICtrlGetHandle($TreeView1)
$item1=GUICtrlCreateTreeViewItem("Root Item 1",$TreeView1)
$item2=GUICtrlCreateTreeViewItem("Root Item 2",$TreeView1)
for $i=1 to 10
GUICtrlCreateTreeViewItem("Child Item "&$i,$item1 )
GUICtrlCreateTreeViewItem("Child Item "&$i,$item2 )
Next
$ListView1=GUICtrlCreateListView("test|test",220,10,320,380)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150)
for $i=1 to 50
GUICtrlCreateListViewItem("List Item"&$i&"|List Item "&$i&" Column 2",$ListView1)
Next
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
#endregion
#region - GUI SelectLoop
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $tNMHDR, $IdFrom, $iCode
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$IdFrom = DllStructGetData($tNMHDR, "IdFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hTreeView
Switch $iCode
Case $TVN_SELCHANGEDW ; <---------------
MsgBox($MB_SYSTEMMODAL,"","changed")
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Alles anzeigen