我需要更改已打开的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'并没有扩展方法'lblNewItems'接受第一个 可以找到类型'System.Windows.Forms.Form'的参数(是吗? 缺少using指令或程序集引用?)
有人可以告诉我是否可以这样做,如果可以的话;如何更改已从其他方法打开的表单上的标签?
答案 0 :(得分:4)
您的问题是fc
的类型为Form
,而您的标签lblNewItems
实际上位于Form
的某个子类上(我猜你的班级是{{ 1}}基于问题)。在尝试访问其元素之前,您需要将Form1
强制转换为实际的表单类型:
fc
答案 1 :(得分:1)
表单是从我的程序中的不同方法打开的,所以它是 已打开,我无法访问原始参考 在首次创建时形成。
在Program.cs中创建对表单的公共静态引用,以便您可以从任何方法访问它,只需在设置标签文本之前检查Null。