La clase System.Web.UI.WebControls.TreeView ofrece este evento, pero la versión Forms de TreeView no lo incluye. ¿Cuál es el equivalente en el mundo de Forms? Estoy usando AfterSelect pero no parece del todo correcto. Tal vez es, de hecho, lo que estoy buscando, pero la documentación es un poco confusa.¿Por qué no hay un evento SelectedNodeChanged para Windows.Forms.TreeView?
Respuesta
No hay ninguno en WinForms TreeView. Para citar MSDN para TreeView.AfterSelect:
Este evento no se produce cuando el nodo no está seleccionado. Para detectar esta ocurrencia, maneje el evento Control.MouseUp y pruebe la propiedad TreeNode.IsSelected.
Sí, esto apesta.
No hay nada de malo con el uso de AfterSelect
.
Sin embargo, tenga en cuenta que no se disparará si se borra la selección (si se convierte en SelectedNode
null
) En su lugar, puede manejar MouseUp
, como se recomienda en el documentation.
Desafortunadamente, cuando maneja 'MouseUp', la propiedad' SelectedNode' de la vista en árbol no se ha actualizado aún. –
OK, esta es una pregunta OOOLD, pero el problema realmente me molestó. Hice esta pequeña clase de ayuda - funciona para mí.
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
Puede agregar otros desencadenantes, p. 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)
Entonces
RaiseEvent SelectedTreeNodeChanged(m_tvw, EventArgs.Empty)
End If
End Sub
Private Sub New(tv As TreeView)
m_tvw = tv
End Sub
End Class
hay ninguno en Windows Forms TreeView. Para citar MSDN para TreeView.AfterSelect:
Este evento no se produce cuando el nodo no está seleccionado. Para detectar esta ocurrencia, maneje el evento Control.MouseUp y pruebe la propiedad TreeNode.IsSelected.
Será mejor que utilice el evento TreeView.NodeMouseClick combinado con AfterSelect. No se llama a AfterSelect cuando selecciona el SelectedNode seleccionado previamente. Así que solo llame a AfterSelect cuando sea necesario, e.Node lo ayudará.
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node == tv.SelectedNode)
treeView1_AfterSelect(sender, null);
}
- 1. ¿Por qué no hay Xcode para Windows?
- 2. Backbone: ¿por qué un collection.reset no desencadena un evento modelo?
- 3. ¿Por qué no hay un documento.createHTMLNode()?
- 4. ¿Por qué no hay un String # shift()?
- 5. ¿Por qué no hay un método Convert.toFloat()?
- 6. ¿Por qué no hay un operador [] para una lista estándar?
- 7. ¿Por qué no hay un método getContentView() para la actividad?
- 8. ¿Por qué no hay Dictionary.TrimExcess()?
- 9. ¿Por qué no hay instrumentación de prueba para BroadcastReceiver?
- 10. ¿Por qué no hay método Service.onStop?
- 11. ¿Por qué alguien debe suscribirse para que ocurra un evento?
- 12. ¿Por qué hay un NSInteger?
- 13. ¿Por qué no hay un método Linq para devolver valores distintos por un predicado?
- 14. epoll_wait con un evento no-IO, no hay señales de
- 15. Datagrid: ¿No hay ningún evento ordenado?
- 16. Android: ¿por qué no hay maxHeight para una vista?
- 17. ¿Por qué no hay NSArrayController para el iPhone?
- 18. ¿Por qué no hay ningún tipo primitivo para Cadena?
- 19. ¿Por qué no hay ReverseEnumerator en C#?
- 20. ¿Por qué no hay competidores reales para Javascript?
- 21. ¿Por qué no hay una fórmula PHP "oficial" para Homebrew?
- 22. ¿Por qué no hay isFocused() en GWT?
- 23. ¿Por qué aún no hay una mod_ruby viable para Apache?
- 24. ¿Por qué no hay DirectX API para Linux?
- 25. ¿Por qué no hay boost :: filesystem :: move_file?
- 26. ¿Por qué no hay ningún hilo ligero real para Python?
- 27. por qué no hay ningún vector para encontrar en C++
- 28. por qué no hay un método de eliminación en HttpWebResponse
- 29. jQuery evento en vivo en iPad ... ¿por qué no funciona?
- 30. ¿Por qué no hay UTF-24?
Control.MouseUp? Deben estar bromeando. ¿Qué pasa si el árbol está navegando con teclas en lugar del mouse? –
Bueno, vale, apesta, pero siempre puedes extender el control y agregar el evento tú mismo. –
¿Cómo se puede anular la selección de un nodo con el teclado? – SLaks