System.Windows.Forms.ToolStripMenuItem奇怪的行为? [英] System.Windows.Forms.ToolStripMenuItem strange behaviour ?

查看:63
本文介绍了System.Windows.Forms.ToolStripMenuItem奇怪的行为?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两种方法可以调用其他方法。一个加载数据并创建ToolStripMenuItem,然后传递给第二个方法。在第二种方法中,菜单将绑定到treenode。奇怪的是,第二个方法块的外部上下文中的所有菜单都不显示


 void LoadData()
{
// .....
ToolStripMenuItem item = new ToolStripMenuItem(" Menu 1");
item.Click + = .....;

BindData(....,new ToolStripMenuItem [] {item},....);
}

void BindData(.....,ToolStripMenuItem [] mis,....)
{
// ....
TreeNode n = .....;
ContextMenuStrip cms = new ContextMenuStrip();
cms.Items.AddRange(mis); //参数中的菜单项不显示

//但是在块内创建的菜单项显示
ToolStripMenuItem mi = new ToolStripMenuItem(" Inside");
cms.Items.Add(mi); //显示

n.ContextMenuStrip = cms; // bind menu-strip
}




很难成为高级程序员

解决方案


实际上,我不能在我身边重现你的问题,它工作正常,所有的StripMenuItem都会显示在ContextMenuStrip中,这是我的截图和测试代码:



 

 private void button1_Click(object sender,EventArgs e)
{
ToolStripMenuItem item1 = new ToolStripMenuItem(" Menu 1");
item1.Click + = item1_Click;
ToolStripMenuItem item2 = new ToolStripMenuItem(" Menu 2");
ToolStripMenuItem item3 = new ToolStripMenuItem(" Menu 3");
ToolStripMenuItem [] tsms = {item1,item2,item3};
BindData(tsms);
}
void BindData(ToolStripMenuItem [] mis)
{
ContextMenuStrip cms = new ContextMenuStrip();
cms.Items.AddRange(mis); //参数中的菜单项不显示
//但是在块内创建的菜单项显示
ToolStripMenuItem mi = new ToolStripMenuItem(" Inside");
cms.Items.Add(mi); //显示
treeView1.SelectedNode.ContextMenuStrip = cms; //绑定菜单 - 条
}


你能告诉我或上传你的项目吗?

问候,

 


Hi , I have 2 methods that one will invoke other. The one load data and created ToolStripMenuItem, then pass to second method. Inside 2nd method the menu will bind into treenode. The strange is all menus from outside context of 2nd method block will not displayed ?

void LoadData()
{
    // .....
    ToolStripMenuItem item = new ToolStripMenuItem("Menu 1");
    item.Click += .....;
    
    BindData(...., new ToolStripMenuItem[] { item }, .... ); 
}

void BindData(....., ToolStripMenuItem[] mis, .... )
{
    // ....
    TreeNode n = .....;
    ContextMenuStrip cms = new ContextMenuStrip();
    cms.Items.AddRange(mis); // menu item from parameter won't show up
    
    // but menu item created inside block show up
    ToolStripMenuItem mi = new ToolStripMenuItem("Inside");
    cms.Items.Add(mi);    // show up

    n.ContextMenuStrip = cms; // bind menu-strip
}


It's hard to be advanced programmer

解决方案

Hi,

Actually,I can't reproduce your issue in my side , It worked fine ,all of the StripMenuItem will display in the ContextMenuStrip,Here is my screenshot and test code:

 

        private void button1_Click(object sender, EventArgs e)
        {
            ToolStripMenuItem item1 = new ToolStripMenuItem("Menu 1");
            item1.Click += item1_Click;
            ToolStripMenuItem item2 = new ToolStripMenuItem("Menu 2");
            ToolStripMenuItem item3 = new ToolStripMenuItem("Menu 3");
            ToolStripMenuItem[] tsms ={item1,item2,item3};
            BindData(tsms);
        }
        void BindData(ToolStripMenuItem[] mis)
        {
            ContextMenuStrip cms = new ContextMenuStrip();
            cms.Items.AddRange(mis); // menu item from parameter won't show up   
            // but menu item created inside block show up
            ToolStripMenuItem mi = new ToolStripMenuItem("Inside");
            cms.Items.Add(mi);    // show up
            treeView1.SelectedNode.ContextMenuStrip = cms; // bind menu-strip
        } 

Could you show me or upload your project for me ?
Regards,

 


这篇关于System.Windows.Forms.ToolStripMenuItem奇怪的行为?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆