我在form1中打开了form2,然后想在form2中控制form1中的menustrip1中各个ToolStripMenuItem的enable属性。
 Form1 f1 = (Form1)this.MdiParent;
上网查了一下
这样的话能访问到menutrip1但是访问不到各个item。
求高手指点一下。

解决方案 »

  1.   

    Form1 f1 = (Form1)this.MdiParent;
    错了,f1是新的对象了想办法把打开form2的form1传给form2
      

  2.   

    那要怎么才能打form1传给form2,对那些窗体传值一点都不明白。
      

  3.   

    错,f1不是新对象,就是主窗体。
    lz可以将menutrip1的访问修饰符改为public,这样你就可以在Form2.cs文件中设置f1的menutrip1的属性值了,你的思路是对的。
      

  4.   

    起码有10种方法把form1传给form2
    1. 在form2里加一句:  public Form1 Form1啊Form1;
    打开form2时,再加一句:f2.Form1啊Form1 = this;
      

  5.   

    但是访问不到它的menustrip1中各个ToolStripMenuItem的属性啊。
    我想改的是他们的属性啊。
      

  6.   


    你把各个ToolStripMenuItem的访问修饰符也改成public的,你想想,你定义在Form1这个类中私有变量,怎么可能在Form2.cs中直接访问呢,(控件也是变量!)必须将该变量的设置成可以在外部访问到。
      

  7.   

    你展开Form1.cs文件后会看到Form1.Designer.cs文件,打开后就可以看到如下代码: private System.Windows.Forms.MenuStrip menuStrip1;
            private System.Windows.Forms.ToolStripMenuItem 文件ToolStripMenuItem;
            private System.Windows.Forms.ToolStripMenuItem 打开ToolStripMenuItem;
            private System.Windows.Forms.ToolStripMenuItem 关闭ToolStripMenuItem;
            private System.Windows.Forms.ToolStripMenuItem tttToolStripMenuItem;将所有的private替换成public,就可以在Form2中访问你想要的东东了
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Form1 f1 = this.MdiParent as Form1;
                f1.打开ToolStripMenuItem.Text = "Open";
            }
        }
      

  8.   

    更改form1窗体中ToolStripMenuItem控件的访问级别为public
      

  9.   

    把窗体类里面的变量改为public,别的类才能访问~
      

  10.   

    用as转换
    From1 f=this.MdiParent as From1;
      

  11.   

    不行啊这样也还是报错。
    private void button1_Click(object sender, EventArgs e)
    {      
     Form1 f = this.MdiParent as Form1;
     f.打开ToolStripMenuItem.Enabled = false;
     f.菜单ToolStripMenuItem.Enabled = false;
    }
      

  12.   

    你的主菜单的类型是不是叫Form1啊?
      

  13.   

    [email protected],你把代码发给我看看
      

  14.   

    你的Form2创建的代码是怎么样的?
      

  15.   

    可以用委托。在Form2中定义
          public delegate void ParentRefreshMenu(string fCommand,string fArgs);//声明一个委托
          public ParentRefreshMenu RefreshMenu;//声明事件
    其中ParentRefreshMenu是委托名,后面是参数,可以随便起,参数可以随便定,调用的时候对应起来就可以了。
    当Form2中想操纵Form1的时候,调用
    RefreshMenu(fCommand, fArgs);在Form1中打开Form2时Form2 f2 = new Form2();
    f2.RefreshMenu += new Form2.ParentRefreshMenu(Refresh_Method);
    f2.Show();Form2不一定是Form1的主窗体
    然后在Form1中写一个实现的公共的事件        /// <summary>
            /// 从子窗体获取参数,刷新主窗体菜单
            /// </summary>
            /// <param name="tbArgs"></param>
            public void Refresh_Method(string fCommand, string fArgs)
            {
                 //根据Form2中的传参,实际是在Form1中操纵细节
            }
    相信楼主想要的功能,可以这样实现
      

  16.   

    1、设置菜单modified=public
    2、Form1 f = (Form1)this.MdiParent;
    ToolStripDropDownItem ts = (ToolStripDropDownItem)f.menuStrip1.Items[0];
    ts = ((ToolStripDropDownItem)ts.DropDownItems[0]);
    ts.Enabled = false;
      

  17.   


    public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Form1 f = this.MdiParent as Form1;
                f.打开ToolStripMenuItem.Enabled = false;
                f.菜单ToolStripMenuItem.Enabled = false;        }public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                f2.Show();
            }
      

  18.   

    public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Form1 f = this.MdiParent as Form1;
                f.打开ToolStripMenuItem.Enabled = false;
                f.菜单ToolStripMenuItem.Enabled = false;        }
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                f2.Show();
            }
      

  19.   


    在我这里调试通过的,你把菜单和菜单项的modifers都设置成public看
      

  20.   


        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Form1 f = this.MdiParent as Form1;
                f.打开ToolStripMenuItem.Enabled = false;
                f.菜单ToolStripMenuItem.Enabled = false;        }
      

  21.   

    public都改了啊。。你能不能把那个发到我的QQ邮箱上去啊[email protected]
      

  22.   


    public都改了能不能发到我的QQ邮箱上去[email protected]
      

  23.   

    是啊,就是在form2里控制form1的enable属性。
      

  24.   

    看了程序之后明白了,但是能不能form2不要在容器里显示?
    那样的话我form1里的东西不就被挡住了?