我目前正在public partial class Form1 : Form
this.Invoke((MethodInvoker)delegate
{
Intellisale_Lastprocessed_Item_Label.Text = "example"
}
因为我有大量的UI元素,所以我宁愿把所有的ui更新代码都放到另一个类中。
因此,我建立了班级" UiUpdate"。
不幸的是,从这个班级我收到的消息:
"表单1不包含Intellisale_Lastprocessed_Item_Label的定义"
可能我忽略了一些非常简单的事情,但我还没有找到答案。
编辑:
由于建议,我将代码更改为以下内容:
class UiUpdate
{
public void UpdateIntellisale(Form1 form)
{
form.Intellisale_Lastprocessed_Item_Label.text = "example";
}
}
不幸的是,我仍然收到没有标签定义的消息
更新2:
如上所述,标签在设计师中被定义为私人
答案 0 :(得分:1)
您对static
类进行Form1
引用,而不是对该类的特定实例进行引用。将您需要的实例传递给您的方法:
public void UpdateIntellisale(Form1 form)
{
form.Intellisale_Lastprocessed_Item_Label.Text = "test";
// etc...
}
当您从表单中调用它时,您会将其引用传递给您的表单。如果从表单本身调用,则可能是this
。基本上你需要你的助手类/方法来了解它正在使用的形式。
答案 1 :(得分:0)
您需要将Form1
类的对象传递给UpdateIntellisale
方法。
像:
class UiUpdate {
public void UpdateIntellisale(Form1 form) {
form.Intellisale_Lastprocessed_Item_Label.text = "test";
}
}
并称之为:UpdateIntellisale(this)
(当然仅当this
属于Form1
类时)
答案 2 :(得分:0)
有几个问题: 1.您将标签称为将其定义为Form1的静态成员。 请改用实例名称。 e.g:
Form1 form = new Form1();
form.Intellisale_Lastprocessed_Item_Label.Text = "example"
// Be aware of an InvalidOperationException with the message, "Control control name accessed from a thread other than the thread it was created on." that is throw if you use this code.