问题描述
这段代码有什么问题?我想在 tabPage3 中的 tabControl1 中更改 Form1 中的标签。
private void FormInsertDanascores_FormClosing(object sender,FormClosingEventArgs e)
{
Form1 frm = new Form1();
foreach (Control c in frm.Controls)
{
foreach (TabPage TabPage in tabControl1.TabPages)
{
foreach (Control control in TabPage.Controls)
{
if (control.Name == "lblInsertEditscores")
{
((Label)(c)).BackColor = Color.Transparent;
((Label)(c)).Text = "jjjjjj";
frm.Refresh();
}
}
}
}
}
解决方法
读取 Form1 frm = new Form1();
的行是您的问题。您正在生成一个全新版本的表单,并更改该新表单上的标签。相反,尝试存储对要更改的表单的引用,或者将其作为当前控件的父级获取。
与遍历所有标签并检查名称不同,您可能会更改受影响标签的可访问性并将其设为 public
,例如。你的代码就这么简单
Form1 frm = new Form1();
from.lblInsertEditScores.BackColor = Color.Transparent;
from.lblInsertEditScores.Text = "jjjjjj";
接下来是 new
创建一个新对象,即一个新窗口。但是你永远不会显示那个新窗口。我的猜测是你已经有这样一个窗口,你不想再创建一个。因此,您应该使用现有的而不是创建一个新的。
因此在 FormInsertDanaScores
中创建一个新属性,例如
public Form1 frm;
并在您创建 FormInsertDanaScores
后分配它。您没有显示该代码,但它可能看起来像
Form1 frm = new Form1();
frm.Show();
var danaScores = new FormInsertDanaScores();
danaScores.frm = frm;
danaScores.Show();
这个命名远非完美,顺便说一句。 Form1
是一个糟糕的类名,frm
也太笼统了。这些名字应该表达一些有意义的东西。
如果 Form1 已经打开并且您从 Form1 内部显示附加窗口,您的代码可能如下所示:
var danaScores = new FormInsertDanaScores();
danaScores.frm = this;
danaScores.ShowDialog();