当前位置:编程学习 > C#/ASP.NET >>

求高手解答

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

想办法把打开form2的form1传给form2 --------------------编程问答-------------------- 那要怎么才能打form1传给form2,对那些窗体传值一点都不明白。 --------------------编程问答--------------------
引用 2 楼  的回复:
Form1 f1 = (Form1)this.MdiParent;
错了,f1是新的对象了

想办法把打开form2的form1传给form2

错,f1不是新对象,就是主窗体。
lz可以将menutrip1的访问修饰符改为public,这样你就可以在Form2.cs文件中设置f1的menutrip1的属性值了,你的思路是对的。 --------------------编程问答-------------------- 起码有10种方法把form1传给form2
1. 在form2里加一句:  public Form1 Form1啊Form1;
打开form2时,再加一句:f2.Form1啊Form1 = this; --------------------编程问答-------------------- 但是访问不到它的menustrip1中各个ToolStripMenuItem的属性啊。
我想改的是他们的属性啊。 --------------------编程问答--------------------
引用 4 楼  的回复:
引用 2 楼  的回复:
Form1 f1 = (Form1)this.MdiParent;
错了,f1是新的对象了

想办法把打开form2的form1传给form2

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


我是新人哇,不要骗我哇
到底怎么才是对的哇
--------------------编程问答--------------------
引用 6 楼  的回复:
但是访问不到它的menustrip1中各个ToolStripMenuItem的属性啊。
我想改的是他们的属性啊。


你把各个ToolStripMenuItem的访问修饰符也改成public的,你想想,你定义在Form1这个类中私有变量,怎么可能在Form2.cs中直接访问呢,(控件也是变量!)必须将该变量的设置成可以在外部访问到。 --------------------编程问答-------------------- 快郁闷死了。。。。。。。。一点都不懂。 --------------------编程问答-------------------- 你展开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";
        }
    }
--------------------编程问答-------------------- 更改form1窗体中ToolStripMenuItem控件的访问级别为public --------------------编程问答-------------------- 把窗体类里面的变量改为public,别的类才能访问~ --------------------编程问答--------------------
引用 10 楼  的回复:
你展开Form1.cs文件后会看到Form1.Designer.cs文件,打开后就可以看到如下代码:

C# code

 private System.Windows.Forms.MenuStrip menuStrip1;
        private System.Windows.Forms.ToolStripMenuItem 文件ToolStripMenuItem;
     ……


那样会            未将对象引用设置到对象的实例。。。。。。 --------------------编程问答-------------------- 郁闷了一下午都没搞定。。。。连上课都听不下去了,
救救小弟我啊。 --------------------编程问答-------------------- 用as转换
From1 f=this.MdiParent as From1;

--------------------编程问答--------------------
引用 15 楼  的回复:
用as转换
From1 f=this.MdiParent as From1;

不行啊这样也还是报错。
private void button1_Click(object sender, EventArgs e)
{      
 Form1 f = this.MdiParent as Form1;
 f.打开ToolStripMenuItem.Enabled = false;
 f.菜单ToolStripMenuItem.Enabled = false;
}
--------------------编程问答--------------------
引用 16 楼  的回复:
引用 15 楼  的回复:
用as转换
From1 f=this.MdiParent as From1;

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

你的主菜单的类型是不是叫Form1啊? --------------------编程问答-------------------- mathieuxiao@yahoo.com.cn,你把代码发给我看看 --------------------编程问答-------------------- 没改过那些名字啊。。。都是默认的 --------------------编程问答-------------------- 循环menutrip1的Item --------------------编程问答-------------------- Form2是不是Form1的子窗体呢? --------------------编程问答-------------------- 你的Form2创建的代码是怎么样的? --------------------编程问答-------------------- 可以用委托。

在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中操纵细节
        }


相信楼主想要的功能,可以这样实现 --------------------编程问答-------------------- 1、设置菜单modified=public
2、


Form1 f = (Form1)this.MdiParent;
ToolStripDropDownItem ts = (ToolStripDropDownItem)f.menuStrip1.Items[0];
ts = ((ToolStripDropDownItem)ts.DropDownItems[0]);
ts.Enabled = false;
--------------------编程问答-------------------- 委托。。。。。。。。。
算了小弟才刚接触,不久对委托一点概念都没。。。实在是看不明白。 --------------------编程问答-------------------- --------------------编程问答-------------------- 24L就是你想要的 --------------------编程问答-------------------- 你可以依葫芦画瓢,其实我也不太懂,但是这样可以实现。 --------------------编程问答--------------------
引用 22 楼  的回复:
你的Form2创建的代码是怎么样的?


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();
        } --------------------编程问答--------------------
引用 27 楼  的回复:
24L就是你想要的

一样的错误。。。。 --------------------编程问答--------------------
引用 22 楼  的回复:
你的Form2创建的代码是怎么样的?



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();
        } --------------------编程问答--------------------
引用 30 楼  的回复:
引用 27 楼  的回复:
24L就是你想要的

一样的错误。。。。


在我这里调试通过的,你把菜单和菜单项的modifers都设置成public看 --------------------编程问答--------------------
引用 22 楼  的回复:
你的Form2创建的代码是怎么样的?


    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;

        }
--------------------编程问答--------------------
引用 32 楼  的回复:
引用 30 楼 的回复:

引用 27 楼 的回复:
24L就是你想要的

一样的错误。。。。


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

public都改了啊。。你能不能把那个发到我的QQ邮箱上去啊245626790@qq.com --------------------编程问答--------------------
引用 32 楼  的回复:
引用 30 楼 的回复:

引用 27 楼 的回复:
24L就是你想要的

一样的错误。。。。


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


public都改了能不能发到我的QQ邮箱上去245626790@qq.com --------------------编程问答--------------------
你是要这个效果吗? --------------------编程问答--------------------
引用 36 楼  的回复:
你是要这个效果吗?

是啊,就是在form2里控制form1的enable属性。 --------------------编程问答--------------------
引用 36 楼  的回复:
你是要这个效果吗?

看了程序之后明白了,但是能不能form2不要在容器里显示?
那样的话我form1里的东西不就被挡住了?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,