如何在C#窗口应用程序中的窗体之间传递值?

我有两种formsA和B.formsA是应用程序的默认启动forms。 我在表单A中做了一些东西,然后我想运行我的表单B并行,然后从表单A传递一个参数给表单B中的一个方法。

怎么样 ?

Ian已经给出了一些示例代码,但是我想提出一个更广泛的观点:

UI类只是类。

如果他们不是用户界面的一部分,你将如何将一个对象的值传递给另一个对象? 你可以从一个到另一个参考,并调用一个方法或设置一个属性。 用户界面对象也是一样的。

我提到这一点,因为这是一个很大的问题。 每当你问自己:“我怎样用表单来做X ?” 尝试问自己同样的问题,但用普通的老class。 答案通常是完全一样的。

当然,用户界面类有一些差别 – 特别是线程 – 但是对于很多情况来说,如果你把它们看作正常的类,它确实有帮助。

FormA应该构造/持有一个FormB实例。 很明显,FormB上的方法需要公开,将CallMethodOnFormB中使用的对象的types也更改为正确的types。

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

根据您的需要,另一种方法是引入一个类( 单例 )的全局实例,该类可以包含要在应用程序的多个表单/类之间共享的内容。

例如,如果你有一个表单,用户可以定义他的设置/偏好,你可以存储在一个单身的数据。 所有其他的类和应用程序的forms,然后可以从同一个单例实例访问/读取这些设置。

这是一个非常基本的单例例子:

 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的属性,例如:

在PreferencesForm.cs中:

 //read the user's input and store it in the settings MySettings.Instance.SomeNumber = txtNumber.Value; 

在SomeOtherForm.cs中:

 //read the user's setting and use it int theNumber = MySettings.Instance.SomeNumber; // do something with theNumber