在类和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中的东西,但这产生了一个新的形式,而不是控制当前的活动形式(也就是说,使用它不会发生任何可见的事情(。

提前谢谢。

在类和acces函数之间传递表单

一种方法是使用委托来传递changeText方法,而不是传递整个表单。这将有助于分离类,我认为这将改进设计。

一个快速的方法是使用一个动作。不传入Forminitialize,而传入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;
    }

只是不要试图从类外调用函数,最好的方法是从类返回,然后调用函数