C# - 从另一个类

时间:2015-12-13 20:07:48

标签: c# asp.net .net visual-studio windows-forms-designer

简而言之, 一个类负责初始化和主GUI控制,而另一个类负责所有请求,数据收集并返回结果,这可能需要一些时间才能完全完成。

一旦使用公共变量收集数据,我就可以将数据从第2级传递给gui类(让我们称之为主类)。但是,从第二课直接写到表格似乎并不那么直截了当。

我尝试做的是在第二类中创建一个主类的实例,然后在第二类的方法中反复调用主类中的public方法,该方法将数据直接写入表单。至少这是理论。

所以它看起来像这样:

第二课:

Gui r1 = new Gui(); 
// ...
result += someVar + "\n";
// ...
r1.setResultsInfo(result);


// method inside the main class for writing to form:

public partial class Gui : Form
{
    public void setResultsInfo(String var)
    {
        resultsInfo.Text += var;  
    }
}

但是,这并没有向表格写任何内容。直接从主类访问和写入resultsInfo可以正常工作,而不是从第二类到主类的实例。我想这可能是因为它试图写入另一个不存在的r1表单的实例,但是如果我显然无法访问主类,我应该如何访问我的活动表单没有创建它的实例?

更新了代码以及更多详细信息:

public partial class Gui : Form
    {

        public Gui Instance;

        public Gui()
        {
            Instance = this;
            InitializeComponent();

        }


// 2nd class: 


static class Program
{


    public static QueryResult[] arr = new QueryResult[20];
    public static string result;

    [STAThread]





    private static void QueryAPIAndPrintResult(string term, string location)
    {

        Gui r1 = new Gui();

        string var;


        System.Console.WriteLine(var = "Ieškoma: '" + term + "' \nvietovėje: '" + location + "'");


        result += var + "\n";

        r1.Instance.setResultsInfo(var); 
        // Gui.Instance.setResultsInfo() // throws error about requiring an instance. 
        // ... 
    }

        // ...
} 


//  main method: 


 static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Gui());
    }

1 个答案:

答案 0 :(得分:1)

您在哪里寻找书面数据?您正在创建一个新的Gui实例,并且根据您发布的代码,您甚至都不会显示该表单。

我建议你看一下the Singleton Pattern,做一下这样的事情:

public class Gui
{
    public static Gui Instance;

    Gui()
    {
        // constructor stuff
        Instance = this;
    }
}

// from your other class
// ...
result += someVar + "\n";
// ...
Gui.Instance.setResultsInfo(result);