在winform中,菜单有二级菜单,三级菜单等等,对于每个终端菜单的点击事件执行的是同一个操作,除了其中一个变量i的不同。现在如何进行这个操作呢

解决方案 »

  1.   

    public void YourOper(int i)
    {
    ..进行的操作
    }
      

  2.   


    button_click()
    {
      YourOper(参数)
    }
    就可以了呀
      

  3.   

    谢谢大家的回复,我把代码贴上来了把
      private void 道路_Click(object sender, EventArgs e)
            {
                myMapParam = m_map.GetCurrentMapParam();
                layers = myMapParam.Layers[10];
                this.道路.Checked = !this.现状道路.Checked;
                if (this.道路.Checked)
                {
                    layers.Visible = true;
                    
                }
                else
                {
                    layers.Visible = false;
                               
                }
                m_map.SetCurrentMapParam(myMapParam);
                myMapParam.ReturnLayers = true;
                m_image = m_map.GetMapImage(myMapParam);
                RefreshStatus(m_image);        }
        对于不同终端菜单的执行唯一不同的是layers的取值。
      

  4.   

    是不是这个意思:
    private void 道路_Click(object sender, EventArgs e)                    
            {
             setlayers(10);
             }
    public void setlayers(int i)
    {
               myMapParam = m_map.GetCurrentMapParam();
                layers = myMapParam.Layers[i];
                this.道路.Checked = !this.现状道路.Checked;
                if (this.道路.Checked)
                {
                    layers.Visible = true;
                    
                }
                else
                {
                    layers.Visible = false;
                               
                }
                m_map.SetCurrentMapParam(myMapParam);
                myMapParam.ReturnLayers = true;
                m_image = m_map.GetMapImage(myMapParam);
                RefreshStatus(m_image);
    }
      

  5.   

    其中的“道路”是一个终端菜单项,layers是它对应的一个图层。对于不同的菜单项,对应不同的layers
      

  6.   

    没有一个menustrip1的一个公共属性吗,直接this.XX.checked吗?这个XX如何定义的啊
      

  7.   

    //将所有菜单添加为同一事件的代码
            private void AllMenu_Click(object sender, EventArgs e)
            {
                myMapParam = m_map.GetCurrentMapParam();
                //这里是不同,注意
                string itemName = ((ToolStripItem)sender).Name;//获取被点击菜单的名称
                switch (itemName)
                {
                    case "道路":   layers = myMapParam.Layers[10];break;
                    //……
                }
                
                /*实际上如果你菜单的Name取的更有技巧,例如成这样"010道路",010代表菜单对应的Layers的下标。
                上面的代码就可以变成这样:
                int itemIndex = int.Parse(((ToolStripItem)sender).Name.Substring(0,3));//获取被点击菜单的名称
                layers = myMapParam.Layers[itemIndex];
                 */            //下面都不变
                this.道路.Checked = !this.现状道路.Checked;
                if (this.道路.Checked)
                {
                    layers.Visible = true;
                    
                }
                else
                {
                    layers.Visible = false;
                               
                }
                m_map.SetCurrentMapParam(myMapParam);
                myMapParam.ReturnLayers = true;
                m_image = m_map.GetMapImage(myMapParam);
                RefreshStatus(m_image);
            }
      

  8.   

    如何是先用菜单项实用同一事件
    在你的<窗口名>.Designer.cs中找到并展开Windows Form Designer generated code
    在其中找到需要添加事件的菜单项,
    例如某菜单事件这样定义:
    this.t2ToolStripMenuItem.Click += new System.EventHandler(this.t2_Click);
    将后面括号内的内容替换成 this.AllMenu_Click 就搞定了,另:
    关于菜单项的所有设置都在这里了。
      

  9.   

    可是“道路”变了撒,道路.checked可能变成XX.checked
      

  10.   

    case "道路":   layers = myMapParam.Layers[10];break;
     case "XX":   layers = myMapParam.Layers[XX];break;
      

  11.   

    不是这个,是下面这个,这个“道路”怎么变成其它终端菜单
    this.道路.Checked = !this.道路.Checked;
                if (this.道路.Checked)
                {
                    layers.Visible = true;
                    
                }
                else
                {
                    layers.Visible = false;
                               
                }
      

  12.   

    if (this.道路.Checked)
    改成
    if(((ToolStripMenuItem)(this.Controls.Find("itemName"))).Checked )
      

  13.   

    抱歉,是this.Controls.Find("itemName",true)今天怎么老犯错??
      

  14.   

    老大,无法将Control转换成ToolStripMenuItem
      

  15.   

    找不到的话用Foreach吧
    foreach(Control control in this.Panel1.Controls )//容器
    {
    if( (control is ToolStripMenuItem) )
    {
      

  16.   

    Control = new ToolStripMenuItem();
      

  17.   

    兄弟,我帮你顶了这么多次你也帮我顶一次吧,我自己顶不了,三次连续回复了,郁闷DELPHI的人怎么都哪样!
    http://community.csdn.net/Expert/topic/5068/5068467.xml?temp=.4444849
    谢了
      

  18.   

    没必要用foreach吧,这个地方仅仅只是需要把“道路”换成公共的菜单条itemName,关键是怎么调用这个itemName,使它具备checked属性
      

  19.   

    //menuStrip1 菜单栏名           
    ToolStripItem[] menu1 = this.menuStrip1.Items.Find("f1", true);if (((ToolStripMenuItem)menu1[0]).Checked)你再试试
      

  20.   

    再加个参数可否?
    private void 道路_Click(object sender, EventArgs e)                    
            {
             this.道路.Checked = !this.现状道路.Checked;//(把它提出来了,不知你喜欢否)
             setlayers(10,this.道路.Checked);
             }
    public void setlayers(int i,bool ischecked)
    {
               myMapParam = m_map.GetCurrentMapParam();
                layers = myMapParam.Layers[i];
                if (ischecked)
                {
                    layers.Visible = true;
                    
                }
                else
                {
                    layers.Visible = false;
                               
                }
                m_map.SetCurrentMapParam(myMapParam);
                myMapParam.ReturnLayers = true;
                m_image = m_map.GetMapImage(myMapParam);
                RefreshStatus(m_image);
    }
      

  21.   

    "索引超出了数组界限"那是因为没有找到菜单项
    是这样写的吗?
    ToolStripItem[] menu1 = this.menuStrip1.Items.Find(itemName, true);
    如果是,改成ToolStripItem[] menu1 = null;
                    menu1 = this.menuStrip1.Items.Find(itemName, true);
    if (menu1 != null && ((ToolStripMenuItem)menu1[0]).Checked)//加个判断,只有找到了才做处理……