TreeView, bearbeiten eines Knotens, Cancel+Escape

16/11/2007 - 18:00 von Jens Müller | Report spam
Hallo,

ich habe einen Commandbutton, der Cancel=true hat und ein TreeView,
dessen Knoten man umbenennen kann.
Möchte man doch nicht umbenennen, kann man Escape drücken, gleichzeitig
wird aber der Commandbutton ausgeführt aufgrund des Cancel=true.
Um das zu verhindern, setze ich Cancel=false im
BeforeLabelEdit-Ereignis und wieder zurück im AfterLabelEdit.
Drückt man aber beim Umbenennen Escape, wird AfterLabelEdit nicht
aufgerufen und der Commandbutton ist nicht mehr über Escape erreichbar.

Gibt es ein Ereignis, welches sicher aufgerufen wird, oder sonstige
Lösungsideen?

Jens
 

Lesen sie die antworten

#1 Thorsten Doerfler
16/11/2007 - 19:22 | Warnen spam
Jens Müller schrieb:
ich habe einen Commandbutton, der Cancel=true hat und ein TreeView,
dessen Knoten man umbenennen kann.
Möchte man doch nicht umbenennen, kann man Escape drücken, gleichzeitig
wird aber der Commandbutton ausgeführt aufgrund des Cancel=true.
Um das zu verhindern, setze ich Cancel=false im
BeforeLabelEdit-Ereignis und wieder zurück im AfterLabelEdit.
Drückt man aber beim Umbenennen Escape, wird AfterLabelEdit nicht
aufgerufen und der Commandbutton ist nicht mehr über Escape erreichbar.

Gibt es ein Ereignis, welches sicher aufgerufen wird, oder sonstige
Lösungsideen?



Letzteres. Lass die Cancel-Eigenschaft in Ruhe und frage im
Click-Ereignis des CommandButton ab, ob sich das TreeView gerade im
Editierungsmodus befindet. Davon ausgehend, dass ein Edit-Control im
TreeView aktiv sein muss, wenn gerade ein Label bearbeitet wird,
ermittelt man über TVM_GETEDITCONTROL dessen Handle. Ist dieser '0',
wird wohl kein Edit-Control vorhanden sein und keine Bearbeitung
stattfinden:

' -- Deklaration --
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any _
) As Long

Private Const TV_FIRST As Long = &H1100&
Private Const TVM_GETEDITCONTROL As Long = (TV_FIRST + 15)

Public Property Get TVLabelEditActive( _
ByRef TreeView As TreeView _
) As Boolean
TVLabelEditActive = CBool(SendMessage(TreeView.hwnd, _
TVM_GETEDITCONTROL, 0, ByVal 0&))
End Property

Private Sub cmdCancel_Click()
If Not TVLabelEditActive(TreeView1) Then
' Nutzlast
End If
End Sub

Thorsten Dörfler
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Ähnliche fragen