System.Web.UI.WebControls.TreeViewクラスはこのイベントを提供しますが、FormsバージョンのTreeViewは提供しません。フォームの世界で同等のものは何ですか? AfterSelectを使用していますが、正しくありません。多分それは実際に私が探しているものですが、ドキュメントは少しかすんでいます。
WinForms TreeViewには何もありません。 MSDNを TreeView.AfterSelect で引用するには:
ノードが選択されていない場合、このイベントは発生しません。この発生を検出するには、Control.MouseUpイベントを処理し、TreeNode.IsSelectedプロパティをテストします。
はい、これは最悪です。
AfterSelect
の使用には何の問題もありません。
ただし、選択がクリアされた場合は起動しません(SelectedNode
がnull
になった場合)。代わりに、 ドキュメントで推奨されているようにMouseUp
を処理できます 。
OK、これはOOOLDの質問ですが、問題は本当に私を悩ませました。私はこの小さなヘルパークラスを作りました-それは私にとってはうまくいきます。
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
他のトリガーを追加できます。 Control.Enter、MouseUpなど.
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)
その後
RaiseEvent SelectedTreeNodeChanged(m_tvw, EventArgs.Empty)
End If
End Sub
Private Sub New(tv As TreeView)
m_tvw = tv
End Sub
End Class
WinForms TreeViewには何もありません。 TreeView.AfterSelectのMSDNを引用するには:
ノードが選択されていない場合、このイベントは発生しません。この発生を検出するには、Control.MouseUpイベントを処理し、TreeNode.IsSelectedプロパティをテストします。
TreeView.NodeMouseClickイベントをAfterSelectと組み合わせて使用する方がよいでしょう。以前に選択したSelectedNodeを選択した場合、AfterSelectは呼び出されません。したがって、必要なときにAfterSelectを呼び出すだけで、e.Nodeが役立ちます。
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node == tv.SelectedNode)
treeView1_AfterSelect(sender, null);
}