我在右键单击树视图时打开上下文菜单的代码如下
private void contextMenu_Opening(object sender, CancelEventArgs e)
{
if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 1)
{
contextMenu.Items.Add(New);
contextMenu.Items.Remove(Remove);
contextMenu.Items.Remove(Saveas);
contextMenu.Items.Remove(Save);
contextMenu.Items.Remove(addEntry);
}
if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 2)
{
contextMenu.Items.Add(New);
contextMenu.Items.Remove(Remove);
contextMenu.Items.Remove(Saveas);
contextMenu.Items.Remove(Save);
contextMenu.Items.Remove(addEntry);
New.Text = "Add FileHeader";
}
if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 3)
{
contextMenu.Items.Remove(New);
contextMenu.Items.Add(Save);
contextMenu.Items.Add(Saveas);
contextMenu.Items.Remove(Remove); //Added later
contextMenu.Items.Remove(addEntry);
}
if (tvwACH.SelectedNode.Parent != null)
{
string str = tvwACH.SelectedNode.Parent.ToString().Substring(10);
if (str == "BatchHeader")
{
contextMenu.Items.Remove(New);
contextMenu.Items.Remove(Save);
contextMenu.Items.Remove(Remove);
contextMenu.Items.Remove(Saveas);
contextMenu.Items.Add(addEntry);
}
}
并按下列鼠标按下树视图
private void tvwACH_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
contextMenu.Show(tvwACH, e.Location);
}
location = e.Location;
}
但是这会在树视图控件的每个地方打开,但是当我点击树视图的节点时我只需要打开它。
请帮助
答案 0 :(得分:1)
如果您只想在用户右键单击节点时显示上下文菜单,则需要在MouseDown
事件处理程序中包含一些逻辑,以验证点击事件是否发生在节点强>
您可以使用TreeView
提供的HitTest
method确定位于特定点的节点。例如,您可以修改当前的MouseDown
事件处理程序以包含以下代码:
private void tvwACH_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
if (tvwACH.HitTest(e.Location).Node != null)
{
contextMenu.Show(tvwACH, e.Location);
}
}
}