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