在c#中我将如何重新生成contextMenu?

时间:2011-06-17 14:24:21

标签: c# winforms contextmenu

我有一个动态生成的上下文菜单。 如何在每次点击时重新加载其中的所有信息?

在下面,MyGlobals.ifparam数组经常被更改。

if (MyGlobals.ifparams[0, 0] != null)
{
    ToolStripMenuItem mnuItemNet1 = new ToolStripMenuItem(MyGlobals.ifparams[0, 0]);
    mnuContextMenu.Items.Add(mnuItemNet1);
    mnuItemNet1.ToolTipText=MyGlobals.ifparams[0, 1];

    ToolStripMenuItem mnuDHCP1 = new ToolStripMenuItem("DHCP");
    ToolStripMenuItem mnuStatic1 = new ToolStripMenuItem("Static");
    if (MyGlobals.ifparams[0, 8] == "1") { mnuDHCP1.Checked = true; mnuStatic1.Checked = false; }
    else { mnuDHCP1.Checked = false; mnuStatic1.Checked = true; }    
    mnuItemNet1.DropDown = mnuContextMenu1;

    ToolStripMenuItem mnuIP1 = new ToolStripMenuItem();
    mnuIP1.Text = MyGlobals.ifparams[0, 3] + "/" + getCIDR(MyGlobals.ifparams[0, 4]);

    mnuContextMenu1.Items.Add(mnuDHCP1);
    mnuContextMenu1.Items.Add(mnuStatic1);
    mnuContextMenu1.Items.Add(mnuIP1);
}

我最关心的是mnuContextMenu1。

1 个答案:

答案 0 :(得分:1)

在上下文菜单类中订阅Opening事件。在这里,您可以在显示上下文菜单之前重建它。

编辑:以下是一个例子:

public partial class Form1 : Form
{
    public Form1()
    {
        this.InitializeComponent();

        // Subscribe to the opening event.
        // Example only: You should subscribe to the event in the designer.
        _contextMenu.Opening += new CancelEventHandler(OnContextMenuOpening);
    }

    private void OnContextMenuOpening(object sender, CancelEventArgs e)
    {           
        // Create a menu item.
        var item = new ToolStripMenuItem(DateTime.Now.ToString());
        item.Click += new EventHandler(OnItemClick);

        // Clear the content menu and add the item to it.
        _contextMenu.Items.Clear();
        _contextMenu.Items.Add(item);
    }

    private void OnItemClick(object sender, EventArgs e)
    {
        // Show the text of the item just for fun.
        MessageBox.Show(((ToolStripMenuItem)sender).Text);
    }
}