我有两种形式A和B.形式A是应用程序的默认启动形式。 我做一些形式A的东西,然后我想要运行我的形式B并行,然后通过 参数从Form A的形式B的方法。如何在C#窗口应用程序中的窗体之间传递值?
如何?
我有两种形式A和B.形式A是应用程序的默认启动形式。 我做一些形式A的东西,然后我想要运行我的形式B并行,然后通过 参数从Form A的形式B的方法。如何在C#窗口应用程序中的窗体之间传递值?
如何?
伊恩给了一些示例代码,但我想提出一个更广泛的观点:
UI类只是类。
如何将一个值从一个对象传递到另一个对象,如果他们不是部分用户界面?你可以从一个到另一个参考,然后调用一个方法或设置一个属性。用户界面对象同样适用。
我提到这个是因为它出现了很多东西。每当你问自己:“我怎么做X与表格?”试着问自己同样的问题,但用简单的老课堂。通常答案将完全相同。
当然有一些用户界面类的差异 - 特别是线程 - 但对于很多情况下,它真的帮助,如果你只是认为他们作为正常的类。
FormA应构造/持有一个实例FormB。很显然,FormB上的方法需要公开,将CallMethodOnFormB中使用的对象的类型也更改为正确的类型。
public class FormA
{
private FormB fB;
public void CreateFormB()
{
// This shows the form in parallel.
this.fB = new FormB();
this.fB.Show();
}
public void CallMethodOnFormB(object value)
{
this.fB.RunSomeFunction(value);
}
}
如果您不想连接表单,则可以使用EventAggregator模式。
一些阅读:
根据您的需求,另一种方法是引入一类的全局实例(一单 ),它可以包含要在应用程序的多个表单/类之间共享的内容lication。例如,如果你有一个表单,用户可以定义他的设置/偏好,你可以将这些数据存储在一个单例中。然后,您的应用程序的所有其他类和形式都可以从相同的单例实例访问/读取这些设置。
这里是一个单身的一个很简单的例子:在PreferencesForm
:
public class MySettings
{
// the one and only instace (the singleton):
public static readonly MySettings Instance = new MySettings();
private MySettings() {} // private constructor
public int SomeNumber { get; set; }
public string SomeString { get; set; }
}
现在,您可以访问设置/自其他类/表单应用程序中获取MySetting的特性,例如。 cs:
//read the user's input and store it in the settings
MySettings.Instance.SomeNumber = txtNumber.Value;
in SomeOtherForm。cs:
//read the user's setting and use it
int theNumber = MySettings.Instance.SomeNumber;
// do something with theNumber
当然是公共或内部。我怀疑我们(我绝对包括自己在内)会公开许多事情,应该只是内部的事情。 – 2009-07-30 08:36:16
是的,的确如此。然而,当我正在处理表单时,通常会尝试创建可以在不同程序集中重用的通用表单,因此我倾向于使用公共表单(或一般的UI类)。如果他们真的需要,我会倾向于让他们公开。 – Ian 2009-07-30 08:40:53