下面是递归调用菜单栏的一段代码
private static void AppLang(ToolStripMenuItem item, System.ComponentModel.ComponentResourceManager resources)
{
     if (item is ToolStripMenuItem)
     {
         resources.ApplyResources(item, item.Name);
         ToolStripMenuItem tsmi = (ToolStripMenuItem)item;
         if (tsmi.DropDownItems.Count > 0)
         {
             foreach (ToolStripMenuItem c in tsmi.DropDownItems)
             {
                AppLang(c, resources);
             }
         }
     }
}出现一个问题,菜单栏上有一个toolStripSeparator类的分割符;但在包含在第一级菜单File文件下
在foreach (ToolStripMenuItem c in tsmi.DropDownItems)循环时
当循环到 toolStripSeparator对象时;跳出异常不能强制把toolStripSeparator类型转换为ToolStripMenuItem类型请问大家有什么方法;在foreach()循环的时候遇到toolStripSeparator时跳过,进入下一个循环我也想过,想把foreach()换成for()循环;但这个是递归调用的,循环变量参数不好控制
请大家一起指点一下

解决方案 »

  1.   


    foreach (ToolStripItem c in tsmi.DropDownItems)
      {
      if (c is ToolStripMenuItem)
      AppLang(c, resources);
      }
      

  2.   

    不是这个原因的
    是在从 tsmi.DropDownItems中取对象的时候就报错了
    foreach不是用ToolStripItem c 来接收tsmi.DropDownItems的赋值
    在循环挑到那一步就报错了
    没有执行到循环体
      

  3.   

    foreach (object obj in tsmi.DropDownItems)
    {
    if (obj is ToolStripMenuItem)
    ToolStripMenuItem c = obj as ToolStripMenuItem;
    AppLang(c, resources);
    }
      

  4.   

    查查MSDN,菜单是ToolStripItem类,无需使用object。
    ToolStripSeparator 也是ToolStripItem。
    public class ToolStripSeparator : ToolStripItem
      

  5.   


    foreach (ToolStripItem c in tsmi.DropDownItems)
    {
      if(c is ToolStripMenuItem)
      {
        AppLang(c, resources);
      }
    }
      

  6.   

    这段代码是 语言转换的
    就是在软件的菜单栏 中英文转换的
    栏目不是很多
    直接在resources中定义文件转换就可以了这段代码也是网上找来了
    至于谁的 忘记了现在一起贴出来给大家看下#region Draw graph
            private void drawPanel_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.DrawRectangle(new Pen(new SolidBrush(Color.Red)), 100, 100, 50, 30);
                using(SolidBrush brush=new SolidBrush(Color.Blue))
                {
                    e.Graphics.FillRectangle(brush,300,50,200,80);     
                }
            }
            #endregion        #region SetLang
            /// <summary>
            /// 设置当前程序的界面语言
            /// </summary>
            /// <param name="lang">language:zh-CN, en-US</param>
            /// <param name="form">窗体实例</param>
            /// <param name="formType">窗体类型</param>
            public static void SetLang(string lang, Form form, Type formType)
            {
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
                if (form != null)
                {
                    System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(formType);
                    resources.ApplyResources(form, "$this");
                    AppLang(form, resources);
                }
            }        #region AppLang for control
            /// <summary>
            /// 遍历窗体所有控件,针对其设置当前界面语言
            /// </summary>
            /// <param name="control"></param>
            /// <param name="resources"></param>
            private static void AppLang(Control control, System.ComponentModel.ComponentResourceManager resources)
            {
                if (control is MenuStrip)
                {
                    resources.ApplyResources(control, control.Name);
                    MenuStrip ms = (MenuStrip)control;
                        if (ms.Items.Count > 0)
                        {
                            foreach (ToolStripMenuItem c in ms.Items)
                            {
                                AppLang(c, resources);
                            }
                        }
                }            foreach (Control c in control.Controls)
                {
                    resources.ApplyResources(c, c.Name);
                    AppLang(c, resources);
                }
            }
            #endregion        #region AppLang for menuitem
            /// <summary>
            /// 遍历菜单
            /// </summary>
            /// <param name="item"></param>
            /// <param name="resources"></param>
            private static void AppLang(ToolStripMenuItem item, System.ComponentModel.ComponentResourceManager resources)
            {
                if (item is ToolStripMenuItem)
                {
                    resources.ApplyResources(item, item.Name);
                    ToolStripMenuItem tsmi = (ToolStripMenuItem)item;
                    if (tsmi.DropDownItems.Count > 0)
                    {
                            foreach (ToolStripItem c in tsmi.DropDownItems)
                            {
                                if (c is ToolStripMenuItem)
                                {   
                                    //按照你的方法 直接把 分隔符ToolStripSeparator类型的过滤掉 实现语言转换
                                    ToolStripMenuItem ts = (ToolStripMenuItem)c;
                                    AppLang(ts, resources);
                                }
                            }
                    }
                }
            }
    #endregion