求高手解答
我在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,对那些窗体传值一点都不明白。 --------------------编程问答--------------------
错,f1不是新对象,就是主窗体。
lz可以将menutrip1的访问修饰符改为public,这样你就可以在Form2.cs文件中设置f1的menutrip1的属性值了,你的思路是对的。 --------------------编程问答-------------------- 起码有10种方法把form1传给form2
1. 在form2里加一句: public Form1 Form1啊Form1;
打开form2时,再加一句:f2.Form1啊Form1 = this; --------------------编程问答-------------------- 但是访问不到它的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,别的类才能访问~ --------------------编程问答--------------------
那样会 未将对象引用设置到对象的实例。。。。。。 --------------------编程问答-------------------- 郁闷了一下午都没搞定。。。。连上课都听不下去了,
救救小弟我啊。 --------------------编程问答-------------------- 用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;
}
--------------------编程问答--------------------
你的主菜单的类型是不是叫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就是你想要的 --------------------编程问答-------------------- 你可以依葫芦画瓢,其实我也不太懂,但是这样可以实现。 --------------------编程问答--------------------
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();
} --------------------编程问答--------------------
一样的错误。。。。 --------------------编程问答--------------------
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();
} --------------------编程问答--------------------
在我这里调试通过的,你把菜单和菜单项的modifers都设置成public看 --------------------编程问答--------------------
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都改了啊。。你能不能把那个发到我的QQ邮箱上去啊245626790@qq.com --------------------编程问答--------------------
public都改了能不能发到我的QQ邮箱上去245626790@qq.com --------------------编程问答--------------------
你是要这个效果吗? --------------------编程问答--------------------
是啊,就是在form2里控制form1的enable属性。 --------------------编程问答--------------------
看了程序之后明白了,但是能不能form2不要在容器里显示?
那样的话我form1里的东西不就被挡住了?
补充:.NET技术 , C#