Sam*_*Sam 69 c# treeview contextmenu winforms
如何找出树列表中的哪个节点已激活上下文菜单?例如,右键单击节点并从菜单中选择一个选项.
我无法使用TreeViews的SelectedNode属性,因为该节点只是右键单击而未选中.
Jon*_*tor 91
您可以将鼠标单击事件添加到TreeView,然后在给定MouseEventArgs提供的鼠标坐标的情况下使用GetNodeAt选择正确的节点.
void treeView1MouseUp(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Right)
{
// Select the clicked node
treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y);
if(treeView1.SelectedNode != null)
{
myContextMenuStrip.Show(treeView1, e.Location);
}
}
}
Run Code Online (Sandbox Code Playgroud)
dee*_*eej 20
这是我的解决方案.将此行放入TreeView的NodeMouseClick事件中:
((TreeView)sender).SelectedNode = e.Node;
Run Code Online (Sandbox Code Playgroud)
小智 12
我发现标准的windows treeview行为选择行为非常烦人.例如,如果您使用资源管理器并右键单击某个节点并单击"属性",则会突出显示该节点并显示您单击的节点的属性对话框.但是当您从对话框返回时,突出显示的节点是先前选择/突出显示的节点,然后才能进行右键单击.我发现这会导致可用性问题,因为我对我是否对正确的节点采取行动感到困惑.
因此,在我们的许多GUI中,我们在右键单击时更改选定的树节点,这样就不会产生混淆.这可能与Explorer之类的标准iwndos应用程序不同(我倾向于在标准窗口应用之后强烈建模我们的GUI行为,出于可用的原因),我相信这个例外情况会导致更多可用的树.
以下是一些在右键单击期间更改选择的代码:
private void tree_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
// only need to change selected note during right-click - otherwise tree does
// fine by itself
if ( e.Button == MouseButtons.Right )
{
Point pt = new Point( e.X, e.Y );
tree.PointToClient( pt );
TreeNode Node = tree.GetNodeAt( pt );
if ( Node != null )
{
if ( Node.Bounds.Contains( pt ) )
{
tree.SelectedNode = Node;
ResetContextMenu();
contextMenuTree.Show( tree, pt );
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
重新回答这个问题,因为我发现这是一个更好的解决方案.我改用NodeMouseClick事件.
void treeview_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if( e.Button == MouseButtons.Right )
{
tree.SelectedNode = e.Node;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53931 次 |
| 最近记录: |