我在我的C#GUI應用程序中使用TreeView和TreeView.Nodes,並希望在我的樹中的幾個節點上使用右鍵單擊功能。我已經搜索了很多,但它似乎像SelectedNode只適用於左鍵單擊,並沒有什麼可以捕獲節點上的右鍵點擊。我想在右鍵單擊時添加諸如「添加」,「刪除」,「重命名」等功能。有任何指導嗎?TreeNode右鍵單擊選項
感謝, Viren
我在我的C#GUI應用程序中使用TreeView和TreeView.Nodes,並希望在我的樹中的幾個節點上使用右鍵單擊功能。我已經搜索了很多,但它似乎像SelectedNode只適用於左鍵單擊,並沒有什麼可以捕獲節點上的右鍵點擊。我想在右鍵單擊時添加諸如「添加」,「刪除」,「重命名」等功能。有任何指導嗎?TreeNode右鍵單擊選項
感謝, Viren
添加處理程序的MouseUp。 在處理程序中,檢查鼠標右鍵的參數,如果不是,則返回。 用鼠標座標調用treeView.GetNodeAt()來查找節點。 創建一個上下文菜單。
下面是它可以適應一個TreeView列表控制類似的東西:
private void listJobs_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
int index = listJobs.IndexFromPoint(e.Location);
if (index != ListBox.NoMatches)
{
listJobs.SelectedIndex = index;
Job job = (Job)listJobs.Items[index];
ContextMenu cm = new ContextMenu();
AddMenuItem(cm, "Run", QueueForRun, job).Enabled = !job.Pending;
AddMenuItem(cm, "Cancel run", CancelQueueForRun, job).Enabled = (job.State == JobState.Pending || job.State == JobState.Running);
AddMenuItem(cm, "Open folder", OpenFolder, job);
cm.Show(listJobs, e.Location);
}
}
}
private MenuItem AddMenuItem(ContextMenu cm, string text, EventHandler handler, object context)
{
MenuItem item = new MenuItem(text, handler);
item.Tag = context;
cm.MenuItems.Add(item);
return item;
}
您可能需要使用PointToClient或PointToScreen在表格上的座標適當翻譯。當上下文菜單出現在錯誤的地方時,您很快就會意識到是否需要它們。
我嘗試使用您的代碼,它不起作用。我改變你的代碼,使我的簡單最初如下: 無效treeView1_MouseUp(對象發件人,發送MouseEventArgs E) { 如果(e.Button == MouseButtons.Right) { treeView1.SelectedNode = treeView1.GetNodeAt(當然, EY); Console.WriteLine(「右鍵單擊」); } } 即使這段簡單的代碼似乎並不奏效。你能指出確切的問題嗎?當我右鍵單擊樹中的某個節點時,甚至不會選擇該節點。 – zack 2009-09-18 14:30:36
嘿謝謝斯科特。現在它工作正常。我忘了將自己編寫的事件處理程序註冊到我的GUI窗體應用程序中。我的錯。 – zack 2009-09-18 15:08:22
不錯的工作。我很高興你解決了它。 – 2009-09-20 19:51:36
使用的ContextMenuStrip上TreeView的屬性添加上下文菜單。如果您不需要顯示某些節點的菜單,則可以處理ContextMenuStrip的「打開」事件以取消其顯示 - 或者,您也可以從中禁用某些菜單的選項。
編輯:搶鼠標下的節點,處理在TreeView控件MouseUp事件,並使用此代碼:
TreeNode nodeUnderMouse = tvMyTreeView.GetNodeAt(e.X, e.Y);
MouseUp只是在開啓事件之後觸發,所以不起作用。似乎沒有辦法在顯示之前修改樹視圖中的上下文菜單。 – Nyerguds 2017-08-08 08:11:58
您是使用Windows Forms還是WPF? – 2009-09-18 13:18:35
是的窗體。對不起忘了提到這一點。和Visual Studio 2005. – zack 2009-09-18 13:20:51