簡體   English   中英

如何解決Treeview單擊的上下文菜單問題

[英]How can i fix the issue for context menu for Treeview click

我的右鍵單擊以打開樹視圖的上下文菜單的代碼如下

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;
    }

但這會在樹視圖控件的所有位置打開,但是我只需要在單擊樹視圖的節點時才將其打開。

任何幫助請

如果只希望在用戶右鍵單擊節點時顯示上下文菜單,則需要在MouseDown事件處理程序中包含一些邏輯以驗證單擊事件是否發生在節點上。

您可以使用TreeView提供的HitTest方法確定位於特定點的節點。 例如,您可以修改當前的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);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM