简而言之, 一个类负责初始化和主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());
}
答案 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);