C#如何在父窗体改变子窗体的控件?
我使用委托,在父窗体中定义From2 form2 = new Form2();this.Invoke((EventHandler)(delegate
{
this.form2.btnMode.Text = "显示";
}));
编译不报错,但Form2里面的控件按钮没改变,是怎么回事?
思路没问题,应该是姿势问题,而且你这个在主窗体中起invoke感觉不太对。。。
直接脏代码给form2 起公开方法不好吗?不要纠结,解决问题先 我试了下,是可以的。
你的form2。show()是在设置之后吗? 跨窗体操作最后使用对象指针 FORM2先定义成全局静态的再试一下 Error.Dan 发表于 2020-8-11 08:48
思路没问题,应该是姿势问题,而且你这个在主窗体中起invoke感觉不太对。。。
直接脏代码给form2 起公开方 ...
委托是在主窗体的线程中,直接Form2 .btnMode.text ="显示”;会报Error 1 'test.debug.btnMode' is inaccessible due to its protection level 结贴。把按钮btnMode 属性modifiers设为 public 即可。 yuyu87 发表于 2020-8-11 13:28
FORM2先定义成全局静态的再试一下
出新问题了。在主窗体声明全局后,Form2 form2 = new Form2 ();先打开form2没问题,但是在先打开第三个窗体,然后再打开第二个窗体时,系统死机。报An unhandled exception of type 'System.ObjectDisposedException' occurred in System.Windows.Forms.dll
Additional information: 无法访问已释放的对象。
系统停在form2.show(); 父子窗体不是有Mdiparent的吗?
public Form2()
{
InitializeComponent();
this.IsMdiContainer = true;
}
private void calcToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form fo in this.MdiChildren)
{
if (fo.Name == "f1")
{
fo.Activate();
return;
}
}
Form1 f1 = new Form1();
f1.MdiParent = this;
f1.Name = "f1";
f1.Show();
}
//Form2是父,Form1是子
页:
[1]