在类和acces函数之间传递表单
本文关键字:表单 之间 函数 acces | 更新日期: 2023-09-27 18:03:13
我正在通过以下操作访问另一个文件:
public void startUpdateChecking()
{
UpdateHandler process = new UpdateHandler();
process.initialize(this);
}
"startUpdateChecking"函数所在的类我也有这个示例函数:
public void changeText(string Text)
{
label2.Text = Text;
}
现在,在UpdateHandler类中,我正在执行以下操作:
public Form form;
public void initialize(Form test)
{
Thread update = new Thread(checkForUpdates);
update.Start();
form = test;
edit();
}
public void edit() {
form.changeText("test");
}
但是由于某种原因,"form"不知道changeText是什么,我该如何制作它,以便在不需要静态函数的情况下使用另一个类(Form2类(中的函数?
我试着做:
Form2 form = new Form2();
我可以控制和访问Form2中的东西,但这产生了一个新的形式,而不是控制当前的活动形式(也就是说,使用它不会发生任何可见的事情(。
提前谢谢。
一种方法是使用委托来传递changeText方法,而不是传递整个表单。这将有助于分离类,我认为这将改进设计。
一个快速的方法是使用一个动作。不传入Form
到initialize
,而传入Action<Text>
表单侧代码将更改为
public void startUpdateChecking()
{
UpdateHandler process = new UpdateHandler();
process.initialize((s) => {changeText(s);});
}
并且UpdateHandler端代码将变为
public void initialize(Action<string> outputMethod)
{
Thread update = new Thread(checkForUpdates);
update.Start();
output= outputMethod;
edit();
}
public void edit() {
output("test");
}
尝试从initialize返回一个值,然后将其传递给ChangeText。
像这样:
public void startUpdateChecking()
{
UpdateHandler process = new UpdateHandler();
string Value1 = process.initialize(this);
ChangeText(Value1);
}
Initialize应该是一个字符串,我不确定表单在那里做什么,以及它与线程更新有什么关系,你可能对了解更多
public string initialize(string test)
{
Thread update = new Thread(checkForUpdates);
update.Start();
form = test;
return test;
}
只是不要试图从类外调用函数,最好的方法是从类返回,然后调用函数