我有一个问题。
我在表单上放了一个treeview控件并添加了一些节点。
public Form1()
{
InitializeComponent();
treeView1.Nodes.Add("root node #1");
treeView1.Nodes.Add("root node #2");
treeView1.Nodes.Add("root node #3");
treeView1.Nodes.Add("root node #4");
treeView1.Nodes.Add("root node #5");
}
我想更改标准的右键单击行为。当我右键单击树节点时,Treeview更改了一段时间selectedIndex。我不想要它。如何修复标准行为?
理想情况下,它是:右键点击treenode文字 - >出现上下文菜单,右键单击treenode文本外的任何位置 - > (绝对)没有任何反应。
答案 0 :(得分:3)
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
// put your logic here like
// ContextMenu1.Show();
}
}
答案 1 :(得分:1)
亚历克斯, 试试这个。 BeforeSelect处理程序事件args取消与鼠标右键关闭的事实有关。这会抑制SelectedIndex的触发发生变化。 MouseDown跟踪是否按下右键并显示上下文菜单。显示器可以安全地移动到MouseUp而不是MouseDown。 MouseUp清除表示按下RightMouse按钮的标志。
有关我如何执行此操作的所有信息均可在MSDN上获得。诀窍实际上是读取所有事件的名称 - 是的我知道有很多 - 然后在你的案例中列出“有趣的”列表,你命名为SelectedIndex更改和鼠标点击。这会立即限制您应该详细阅读的事件名称...如果您希望文本在您点击右键时不突出显示......那么这完全是另一回事,我提醒您反对它,因为它是有价值的用户反馈。
bool isRBut = false;
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
isRBut = e.Button == MouseButtons.Right;
if (isRBut)
{
TreeViewHitTestInfo hti =treeView1.HitTest(e.Location);
if (hti.Location == TreeViewHitTestLocations.Label)
contextMenuStrip1.Show(treeView1, new Point(hti.Node.Bounds.Left, hti.Node.Bounds.Bottom));
}
}
private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
isRBut = e.Button == MouseButtons.Right;
}
private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
e.Cancel = isRBut;
}
此外,这里有一些人类语言琐事。希望这将在未来帮助您。诸如“不,不,不”之类的短语被英语母语人士解释为非常粗鲁。只要尽力列出您看到的行为以及您想要的行为。即使人们误解只是坚持事实而忽略了明显的挫折迹象。这将帮助您获得所需的信息。如果某人有不接受答案的习惯,那么很多成员都会习惯不向这些成员提供未来的答案。
答案 2 :(得分:0)
覆盖MouseClick事件,并在事件中检查点击是否是右键单击
private void treeView1_MouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
//Do something
}
}
答案 3 :(得分:0)
您需要处理NodeMouseClick事件并检查单击鼠标右键:
treeView1.NodeMouseClick += (o, e) => {
if(e.Button == MouseButtons.Right)
{
//show menu...
}
};