如何找出树列表中上下文菜单已被激活的节点?例如,右击节点并从菜单中选择一个选项。
我不能使用TreeViews的SelectedNode
属性,因为该节点只被右键单击而没有被选中。
发布于 2008-08-05 16:36:43
可以将鼠标单击事件添加到TreeView,然后使用GetNodeAt根据MouseEventArgs提供的鼠标坐标选择正确的节点。
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);
}
}
}
发布于 2010-12-09 07:05:57
这是我的解决方案。将这一行放入TreeView的NodeMouseClick事件中:
((TreeView)sender).SelectedNode = e.Node;
发布于 2008-12-11 21:10:43
我发现标准的windows树视图行为选择行为相当烦人。例如,如果您正在使用资源管理器,右键单击一个节点并单击Properties,它将突出显示该节点,并显示您所单击的节点的属性对话框。但是,当您从对话框返回时,高亮显示的节点是在您单击鼠标右键之前选择/高亮显示的节点。我发现这导致了可用性问题,因为我总是对我是否在正确的节点上操作感到困惑。
因此,在我们的许多GUI中,我们通过右键单击来更改选定的树节点,这样就不会产生混淆。这可能与资源管理器之类的标准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 );
}
}
}
}
https://stackoverflow.com/questions/2527
复制相似问题