我在form1中打开了form2,然后想在form2中控制form1中的menustrip1中各个ToolStripMenuItem的enable属性。
Form1 f1 = (Form1)this.MdiParent;
上网查了一下
这样的话能访问到menutrip1但是访问不到各个item。
求高手指点一下。
Form1 f1 = (Form1)this.MdiParent;
上网查了一下
这样的话能访问到menutrip1但是访问不到各个item。
求高手指点一下。
错了,f1是新的对象了想办法把打开form2的form1传给form2
lz可以将menutrip1的访问修饰符改为public,这样你就可以在Form2.cs文件中设置f1的menutrip1的属性值了,你的思路是对的。
1. 在form2里加一句: public Form1 Form1啊Form1;
打开form2时,再加一句:f2.Form1啊Form1 = this;
我想改的是他们的属性啊。
你把各个ToolStripMenuItem的访问修饰符也改成public的,你想想,你定义在Form1这个类中私有变量,怎么可能在Form2.cs中直接访问呢,(控件也是变量!)必须将该变量的设置成可以在外部访问到。
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";
}
}
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;
}
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中操纵细节
}
相信楼主想要的功能,可以这样实现
2、Form1 f = (Form1)this.MdiParent;
ToolStripDropDownItem ts = (ToolStripDropDownItem)f.menuStrip1.Items[0];
ts = ((ToolStripDropDownItem)ts.DropDownItems[0]);
ts.Enabled = false;
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 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邮箱上去[email protected]
那样的话我form1里的东西不就被挡住了?