在winforms中从另一个控件访问一个控件



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

相关内容

  • 没有找到相关文章

最新更新