这段代码有什么问题?我想在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();