我有一个动态生成的上下文菜单。 如何在每次点击时重新加载其中的所有信息?
在下面,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。
答案 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);
}
}