0

我需要更改已经打开的 C# Winform 上的标签文本。该表单是从我的程序中的不同方法打开的,因此它已经打开,并且在首次创建表单时我无法访问该表单的原始引用。

我尝试在下面的代码中执行此操作,但无法访问表单上的标签。有没有办法可以更改已经运行的表单(从另一种方法)上的标签?

//http://stackoverflow.com/questions/3861602/c-sharp-how-check-if-the-form-is-already-open-and-close-it-if-it-does
Form fc = Application.OpenForms["form1"];

if (fc != null)
{
     //This does not work.  I can not access the lblNewItems label.
     //The label has it's public modifier set to Public and I am able
     //to set this label successfully when I create the form originally
     //from the other method.

     fc.lblNewItems.Text = "Change text"; 
}

编译上述内容时,出现以下错误:

错误 4“System.Windows.Forms.Form”不包含“lblNewItems”的定义,并且找不到接受“System.Windows.Forms.Form”类型的第一个参数的扩展方法“lblNewItems”(您是否缺少使用指令还是程序集引用?)

有人可以告诉我这是否可行,如果可以;如何更改已从另一种方法打开的表单上的标签?

4

2 回答 2

4

你的问题是fctype Form,而你的标签lblNewItems实际上是在某个子类上Form(我猜你的类是Form1基于这个问题的)。fc在尝试访问其元素之前,您需要转换为实际的表单类型:

Form1 fc = (Form1)Application.OpenForms["form1"];    
if (fc != null)
{
     fc.lblNewItems.Text = "Change text"; 
}
于 2012-09-27T16:20:18.843 回答
1

该表单是从我的程序中的不同方法打开的,因此它已经打开,并且在首次创建表单时我无法访问该表单的原始引用。

在 Program.cs 中创建对表单的公共静态引用,以便您可以从任何方法访问它,只需在设置标签文本之前检查 Null。

于 2012-09-27T16:05:09.640 回答