从C#中的另一个类调用主窗体中的函数

时间:2017-04-19 09:10:39

标签: c#

如何从另一个类调用位于Form类中的函数?

这是我的代码。我想在get_data(data)类中调用prog

感谢。

public partial class Form1 : Form
{
    get_data(int mydata)
    {
        //code
    }

    //code
    prog var1=new prog();
    var1.start_data();
}



public class prog
{
    public void start_data()
    {
        Thread ct=new Thread(do);
        ct.start();
    }

    private void do()
    {
        int data=40;
        get_data(data);  ///?????????????this is wrog
    }
}

3 个答案:

答案 0 :(得分:2)

如果您需要访问主表单的当前实例,可以将其传递给类:

public partial class Form1 : Form
{
    internal void get_data(int mydata)//Change to internal or public, as default is private
    {
        //code
    }

    private void button1_Click(object sender, EventArgs e)
    {
        prog var1 = new prog();
        var1.start_data(this);//pass along instance of your main form
    }
}

public class prog
{
    private Form1 MainForm;
    public void start_data(Form1 form)
    {
        MainForm = form;//set form
        Thread ct = new Thread(doSmt);
        ct.Start();
    }

    private void doSmt()
    {
        int data = 40;
        MainForm.get_data(data);  //use form
    }
}

答案 1 :(得分:1)

该方法不是静态的,因此您需要实际实例化Form1类。

答案 2 :(得分:0)

在从另一个类调用方法之前,您需要此类的实例。一种方法是创建一个新实例。

但是我猜你已经有了这个班级的一个实例,因为它是一个表格,我猜你在任何地方打开这个表格;只需使用此实例。

提示:我不会在表单中添加任何业务逻辑。我会把它放在另一个班级。

private void do()
{
    int data=40;
    Form1 form = new Form1();
    form.get_data(data); 
}

请勿忘记将get_data方法设为公开,因为当私有方法无法在其他类中访问它时。