首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ContextMenuStrip.Items慢克隆

ContextMenuStrip.Items慢克隆
EN

Stack Overflow用户
提问于 2017-09-05 04:35:46
回答 1查看 127关注 0票数 0

我有两个类,每个类都有自己的ContextMenuStrip。由于每个Obejct都可以从另一个Obejct访问,所以我希望将一个对象的每个ToolStripMenuItem嵌入到其他ContextMenuStrip的一个DropDown中。

对象的类型为MACTCPIP,这是MACs ContextMenuStrip的片段

代码语言:javascript
复制
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部件的片段:

代码语言:javascript
复制
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进行迭代。但我也不明白原因。但也许这和我的问题有关?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-07 00:43:09

每次使用SingleItemContextMenue时都会调用ip.SingleItemContextMenue getter。

代码语言:javascript
复制
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46047086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档