我有两个类,每个类都有自己的ContextMenuStrip。由于每个Obejct都可以从另一个Obejct访问,所以我希望将一个对象的每个ToolStripMenuItem嵌入到其他ContextMenuStrip的一个DropDown中。
对象的类型为MAC和TCPIP,这是MACs ContextMenuStrip的片段
ContextMenuStrip cms = new ContextMenuStrip();
foreach (TCPIP ip in AssignedTCPIPentries) {
mi = new ToolStripMenuItem(ip.IP + " - " + ip.Hostname);
for (int t = 0; t < ip.SingleItemContextMenue.Items.Count; t++) {
mi.DropDown.Items.Add(ip.SingleItemContextMenue.Items[t]);
}
cms.Items.Add(mi);
}我的问题是,如果我使用TCPIP onbject并访问ContextMenuStrip,它就会自动打开。(按原计划)
当我调用MACs ContextMenuStrip并希望将每个已分配的TCPIP对象的每个ContextMenuStrip.Item嵌入到一个子菜单(如上面的代码所示)时,需要使用年龄(每个TCPIP对象约10秒)来完成(每个TCPIP遵从21 ToolStripMenuItems)。但为什么它的表现如此糟糕,我如何避免这种情况呢?
TCPIP.SingleItemContextMenue部件的片段:
public ContextMenuStrip SingleItemContextMenue {
get {
ContextMenuStrip cms = new ContextMenuStrip();
ToolStripMenuItem mi = new ToolStripMenuItem();
mi.Text = "IP Infos [" + IP + "]";
mi.Click += new EventHandler(showDetailedInformation);
mi.Image = Toolbox.Properties.Resources.Info_64;
cms.Items.Add(mi);
cms.Items.Add(new ToolStripSeparator()); // Horizontal line
mi = new ToolStripMenuItem("Copy IP [" + IP + "]");
mi.Image = Toolbox.Properties.Resources.Copy_64;
mi.Click += new EventHandler((ss, e) => general.copyStringIntoClipboard(ss, e, IP));
cms.Items.Add(mi);
//And some more...
return cms;
}
}PS:由于枚举问题,foreach没有通过ContextMenuStrip.Items进行迭代。但我也不明白原因。但也许这和我的问题有关?
发布于 2018-04-07 00:43:09
每次使用SingleItemContextMenue时都会调用ip.SingleItemContextMenue getter。
ContextMenuStrip cms = new ContextMenuStrip();
foreach (TCPIP ip in AssignedTCPIPentries) {
mi = new ToolStripMenuItem(ip.IP + " - " + ip.Hostname);
var ipSingleItemContextMenueItems = ip.SingleItemContextMenue.Items; // get items
for (int t = 0; t < ipSingleItemContextMenueItems.Count; t++) {
mi.DropDown.Items.Add(ipSingleItemContextMenueItems[t]);
}
cms.Items.Add(mi);
}https://stackoverflow.com/questions/46047086
复制相似问题