C# 以传递的形式在类和acces函数之间传递表单
我正在通过以下操作访问另一个文件:C# 以传递的形式在类和acces函数之间传递表单,c#,forms,class,object,C#,Forms,Class,Object,我正在通过以下操作访问另一个文件: public void startUpdateChecking() { UpdateHandler process = new UpdateHandler(); process.initialize(this); } public Form form; public void initialize(Form test) { Thread update
public void startUpdateChecking()
{
UpdateHandler process = new UpdateHandler();
process.initialize(this);
}
public Form form;
public void initialize(Form test)
{
Thread update = new Thread(checkForUpdates);
update.Start();
form = test;
edit();
}
public void edit() {
form.changeText("test");
}
与“startUpdateChecking”函数所在的类相同,我还有以下示例函数:
public void changeText(string Text)
{
label2.Text = Text;
}
现在在UpdateHandler类中,我正在执行以下操作:
public void startUpdateChecking()
{
UpdateHandler process = new UpdateHandler();
process.initialize(this);
}
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方法,而不是传递整个表单。这将有助于分离类,我认为这将改进设计 一个快速的方法是使用一个动作。而不是将
表单
传递到初始化
传递操作
表单端代码将更改为
public void startUpdateChecking()
{
UpdateHandler process = new UpdateHandler();
process.initialize((s) => {changeText(s);});
}
public void initialize(Action<string> outputMethod)
{
Thread update = new Thread(checkForUpdates);
update.Start();
output= outputMethod;
edit();
}
public void edit() {
output("test");
}
UpdateHandler端代码将更改为
public void startUpdateChecking()
{
UpdateHandler process = new UpdateHandler();
process.initialize((s) => {changeText(s);});
}
public void initialize(Action<string> outputMethod)
{
Thread update = new Thread(checkForUpdates);
update.Start();
output= outputMethod;
edit();
}
public void edit() {
output("test");
}
public void初始化(Action outputMethod)
{
线程更新=新线程(checkForUpdates);
update.Start();
输出=输出方法;
编辑();
}
公共作废编辑(){
输出(“测试”);
}
尝试从initialize返回一个值,然后将其传递给ChangeText
像这样:
public void startUpdateChecking()
{
UpdateHandler process = new UpdateHandler();
string Value1 = process.initialize(this);
ChangeText(Value1);
}
初始化应该是一个字符串,我不确定表单在那里做什么,它与线程更新有什么关系,这可能是您了解得更多的内容
public string initialize(string test)
{
Thread update = new Thread(checkForUpdates);
update.Start();
form = test;
return test;
}
只是不要试图从类中调用函数,最好的方法是从类中返回,然后调用函数
表单
是基类,它需要是特定的类,而不需要对设计进行咆哮……,您需要将引用传递给更新处理程序。e、 g.newupdatehandler(form2)
或使用form2的静态实例。@James barras是否愿意展示第一个选项的示例?另外,请对设计大喊大叫,我只能从中学习。另外,如果我将函数更改为静态,那么基本上我需要开始将我所做的一切和将来的一切转换为静态。。因为这只是一个例子,但在实际程序中,我尝试访问的函数是程序的一大部分,它也有很多子函数。它的设计方面应该避免像这样将类绑定在一起,它防止了代码的重复使用,并使单元测试等工作超出了需要。我需要访问Form2表单中的函数,也就是“startUpdateChecking”类。或者我只是没有收到你的代码?@user2911924你收到了,但是通过操作
间接收到了。UpdateHandler调用outputMethod
,outputMethod
调用changeText