【问题标题】:Calling a function in the main Form from another Class in C#从 C# 中的另一个类调用主窗体中的函数
【发布时间】:2017-09-15 10:04:35
【问题描述】:

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

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

谢谢。

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
    }
}

【问题讨论】:

标签: c#


【解决方案1】:

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

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
    }
}

【讨论】:

    【解决方案2】:

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

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

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

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

    不要忘记将 get_data 方法设为公开,因为当它是私有的时,您无法在另一个类中访问它。

    【讨论】:

    • @smk 因为你没有描述这个方法应该做什么,我们无法猜测它的意思:“不正常工作”。我们无法读心
    • @smk 您是否在get_data 方法中访问类Form1 中的任何变量?它不工作到底是什么意思?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 2015-05-17
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多