C# 控件属性don';不允许改变

C# 控件属性don';不允许改变,c#,winforms,C#,Winforms,我的主窗体包含两个按钮(btnLoad和btnChange)和一个面板 单击btnLoad时,它会将其他窗体(有5个不同的窗体和不同的控件)加载到面板中。让我假设其中一个名为Form2的函数包含一个标签(labelMessage) 我的问题是,当我单击btnChange时,下面的语句将不起作用 f2.labelMessage.Text = "Button Change Clicked"; 我的代码是 // codes on mainFrom private void btnChange_Cl

我的主窗体包含两个按钮(btnLoad和btnChange)和一个面板

单击btnLoad时,它会将其他窗体(有5个不同的窗体和不同的控件)加载到面板中。让我假设其中一个名为Form2的函数包含一个标签(labelMessage)

我的问题是,当我单击btnChange时,下面的语句将不起作用

f2.labelMessage.Text = "Button Change Clicked";
我的代码是

// codes on mainFrom

private void btnChange_Click(object sender, EventArgs e)
{

   Form2 f2 = new From2();
   f2.labelMessage.Text = "Button Change Clicked"; //labelMessage's modifier is public

}


private void btnLoad_Click(object sender, EventArgs e)
{
    panelDock.Controls.Clear();
    Form f2 = new Form2();
    f2.TopLevel = false;
    panelDock.Controls.Add(f2);
    f2.Show();

}

这是错误的吗?

因为已经显示了Form2,所以您应该使用它,而不是创建Form2的新实例

private void btnChange_Click(object sender, EventArgs e)
{
    Form2 f2 = (Form2)Application.OpenForms["Form2"];
    f2.labelMessage.Text = "Button Change Clicked"; //labelMessage's modifier is public
}
根据您的评论,Form2位于面板中,您可以尝试

private void btnChange_Click(object sender, EventArgs e)
{
    Form2 f2 = (Form2)panel1.Controls["Form2"];
    f2.labelMessage.Text = "Button Change Clicked"; //labelMessage's modifier is public
}

因为已经显示了Form2,所以应该使用而不是创建Form2的新实例

private void btnChange_Click(object sender, EventArgs e)
{
    Form2 f2 = (Form2)Application.OpenForms["Form2"];
    f2.labelMessage.Text = "Button Change Clicked"; //labelMessage's modifier is public
}
根据您的评论,Form2位于面板中,您可以尝试

private void btnChange_Click(object sender, EventArgs e)
{
    Form2 f2 = (Form2)panel1.Controls["Form2"];
    f2.labelMessage.Text = "Button Change Clicked"; //labelMessage's modifier is public
}

表格2是否已显示?是。。使用btnLoad将Form2加载到面板中。是否已显示Form2?是。。使用btnLoad将Form2加载到面板中。问题是在单击btnLoad后,Form2加载到面板中并显示。@Chathura我想您的意思是,如果用户在btnLoad之前单击btnChange,则会引发异常。我说的对吗?不对。。我编译了代码,首先将Form2加载到面板中,然后单击btnChange按钮。但出现异常“对象引用未设置为对象的实例”。这就是发生的事情。@Chathura将Form2加载到面板中?表格2是表格吗?你能展示你用来做这件事的代码吗?@Chathura即使使用你的代码,我的初始答案对我来说仍然有效,但请尝试我的第二个代码问题是在单击btnLoad后,Form2加载到面板并显示出来。@Chathura我想你的意思是,如果用户在btnLoad之前单击btnChange,就会引发异常。我说的对吗?不对。。我编译了代码,首先将Form2加载到面板中,然后单击btnChange按钮。但出现异常“对象引用未设置为对象的实例”。这就是发生的事情。@Chathura将Form2加载到面板中?表格2是表格吗?你能展示一下你用来做这件事的代码吗?@Chathura即使使用你的代码,我的初始答案对我来说仍然有效,但试试我的第二个代码