我想更改主窗体中函数类的标签文本。我想我可以缩小问题的范围,但找不到好的解决方案。可能我误解了WinForms中的示例。
最喜欢的溶液表1
public static Form1 f1Instance;
public Label lbl;
public Form1()
{
InitializeComponent();
f1Instance = this;
lbl = label1; //label1 = made by designer
}
类1(问题是我把函数放在类中而不是winform中吗?)
public void changeLblTxt(string txt)
{
Form1.f1Instance.lbl.Text = txt;
}
但是这样做不起作用,我不明白为什么。这样做不是调用了Form1当前显示的示例吗?
适用于表1的解决方案
public static Form1 f1Instance;
public Label lbl;
public Form1()
{
InitializeComponent();
f1Instance = this;
lbl = label1; //label1 = made by designer
}
1类
public void changeLblTxt(string txt)
{
Form1.f1Instance.lbl.Text = "Hello";
Form1.f1Instance.Show();
}
但是我用它来多次调用Form1,不是吗?这与更长的运行时间和更多的交互不太匹配,不是吗?
我已经找到了无数关于这个主题的文章,但没有一篇能帮上忙。有人知道有一篇文章展示了一个很好的解决方案吗?
2条答案
按热度按时间bf1o4zei1#
如果你有一个与表单交互的类,那么这个类应该有一个对表单示例的引用。使用静态字段和列表来尝试获取“当前”表单示例似乎是一个糟糕的设计。
我将把form示例交给类:
如果你有两种形式:
qyuhtwio2#
在和chatgpt聊天后我发现了一个方法:表格1
表格2
有人能给我解释一下为什么这个列表可以工作,但是直接赋值(首先尝试解决它)不起作用吗?据我所知,我也做过同样的事情。