Die Klasse System.Web.UI.WebControls.TreeView bietet dieses Ereignis, die Forms-Version von TreeView jedoch nicht. Was ist das Äquivalent in der Welt der Formulare? Ich benutze AfterSelect, aber es scheint nicht ganz richtig zu sein. Vielleicht ist es in der Tat, was ich suche, aber die Dokumentation ist ein bisschen verschwommen.Warum gibt es kein SelectedNodeChanged-Ereignis für Windows.Forms.TreeView?
Antwort
Es gibt keine in WinForms TreeView. Um MSDN für TreeView.AfterSelect zu zitieren:
Dieses Ereignis tritt nicht auf, wenn der Knoten nicht ausgewählt ist. Um dieses Ereignis zu erkennen, behandeln Sie das Control.MouseUp-Ereignis und testen Sie die TreeNode.IsSelected-Eigenschaft.
Ja, das ist scheiße.
Es ist nichts falsch mit der Verwendung AfterSelect
.
Beachten Sie jedoch, dass es wird nicht ausgelöst, wenn die Auswahl gelöscht wird (wenn SelectedNode
null
wird) Stattdessen können Sie MouseUp
handhaben, wie sie in der documentation empfohlen.
Leider, wenn Sie 'MouseUp' bearbeiten, wurde die' SelectedNode' Eigenschaft der Baumansicht noch nicht aktualisiert. –
OK, das ist eine OOOLD Frage, aber das Problem hat mich wirklich genervt. Ich habe diese kleine Helferklasse gemacht - sie funktioniert für mich.
Public Class TreeViewSelectedNodeChangeEventHandler
Public Event SelectedTreeNodeChanged(sender As Object, e As EventArgs)
Private m_selectedNode As TreeNode
Private WithEvents m_tvw As TreeView
Public Shared Function FromTree(tree As TreeView) As TreeViewSelectedNodeChangeEventHandler
If Not IsNothing(tree) Then
Return New TreeViewSelectedNodeChangeEventHandler(tree)
End If
Return Nothing
End Function
''' <summary>Assigns 'Value' to 'this' and returns 'Value'.</summary>
Private Function InLineAssign(Of V)(ByRef this As V, value As V) As V
Dim ret = value
this = value
Return ret
End Function
Fügen Sie möglicherweise weitere Trigger hinzu, z. Control.Enter, MouseUp etc. etc.
Private Sub keyUp(sender As Object, e As KeyEventArgs) Handles m_tvw.KeyUp
If Not Me.m_selectedNode Is InLineAssign(Me.m_selectedNode, m_tvw.SelectedNode)
Dann
RaiseEvent SelectedTreeNodeChanged(m_tvw, EventArgs.Empty)
End If
End Sub
Private Sub New(tv As TreeView)
m_tvw = tv
End Sub
End Class
Es gibt keine in WinForms TreeView. Um MSDN für TreeView.AfterSelect zu zitieren:
Dieses Ereignis tritt nicht auf, wenn der Knoten nicht ausgewählt ist. Um dieses Ereignis zu erkennen, behandeln Sie das Control.MouseUp-Ereignis und testen Sie die TreeNode.IsSelected-Eigenschaft.
Verwenden Sie besser das TreeView.NodeMouseClick-Ereignis in Kombination mit AfterSelect. AfterSelect wird nicht aufgerufen, wenn Sie den zuvor ausgewählten SelectedNode auswählen. Rufen Sie einfach AfterSelect an, wenn nötig, e.Node hilft Ihnen dabei.
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node == tv.SelectedNode)
treeView1_AfterSelect(sender, null);
}
- 1. Warum gibt es kein SingleOrDefaultAsync für IQueryables?
- 2. Warum gibt es kein foreignAutoDelete?
- 3. Warum gibt es kein umfassendes c Archivnetzwerk?
- 4. Warum gibt es kein Std :: Protect?
- 5. Warum gibt es kein `unquote'-Lisp-Primitiv?
- 6. Warum gibt es kein boost :: filesystem :: move_file?
- 7. Warum gibt es kein List.skip und List.take?
- 8. Warum gibt es kein StrongReference-Objekt?
- 9. Warum gibt es kein UTF-24?
- 10. Warum gibt es kein AndAttribute in specflow?
- 11. Warum gibt es kein "nonnil" Attribut für den Klang?
- 12. Warum gibt es kein std :: is_transparent-Äquivalent für ungeordnete Container?
- 13. Warum gibt es kein ungültiges Deklarationsproblem für, wenn wir auspacken
- 14. Warum gibt es kein DirectX API für Linux?
- 15. Warum gibt es kein glBindAttribLocation() für gleichförmige Variablen?
- 16. Warum gibt es in .NET 4.5 kein CallerTypeNameAttribute?
- 17. Es gibt kein Attribut „allowtransparency“
- 18. Warum gibt es in .NET kein XML-serialisierbares Wörterbuch?
- 19. Warum gibt es kein Argument "Position" in Relay + GraphQL-Verbindungen?
- 20. Warum gibt es in OpenGL kein primitives Kreis- oder Ellipsenelement?
- 21. Warum gibt es in CSS kein Float-Center?
- 22. Warum gibt es kein ausgerichtetes Calloc in C11?
- 23. Warum gibt es keine Testinstrumentierung für BroadcastReceiver?
- 24. Warum gibt es keine Typklasse für Containertypen?
- 25. Warum gibt Scales Entrance.RightProjection # -Filter kein Entweder?
- 26. Warum gibt dieser Stream kein Element zurück?
- 27. Für welchen Zweck gibt es $ deferr, $ defout und warum gibt es keine $ definition
- 28. Gibt es kein TFS-Snapin für PowerShell auf x64?
- 29. Es gibt kein South-Datenbankmodul 'south.db.postgresql_psycopg2' für Ihre Datenbank
- 30. Es gibt kein South-Datenbankmodul 'south.db.postgresql_psycopg2' für Ihre Datenbank django
Control.MouseUp? Sie müssen Spaß machen. Was passiert, wenn der Baum mit Tasten anstelle der Maus navigiert? –
Nun, ok, es ist scheiße, aber du könntest immer nur das Steuerelement erweitern und das Ereignis selbst hinzufügen. –
Wie können Sie einen Knoten mit der Tastatur abwählen? – SLaks