2009-07-30 56 views

回答

12

伊恩给了一些示例代码,但我想提出一个更广泛的观点:

UI类只是类。

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

我提到这个是因为它出现了很多东西。每当你问自己:“我怎么做X与表格?”试着问自己同样的问题,但用简单的老课堂。通常答案将完全相同。

当然有一些用户界面类的差异 - 特别是线程 - 但对于很多情况下,它真的帮助,如果你只是认为他们作为正常的类。

6

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

当然是公共或内部。我怀疑我们(我绝对包括自己在内)会公开许多事情,应该只是内部的事情。 – 2009-07-30 08:36:16

+0

是的,的确如此。然而,当我正在处理表单时,通常会尝试创建可以在不同程序集中重用的通用表单,因此我倾向于使用公共表单(或一般的UI类)。如果他们真的需要,我会倾向于让他们公开。 – Ian 2009-07-30 08:40:53

0

根据您的需求,另一种方法是引入一类的全局实例(一 ),它可以包含要在应用程序的多个表单/类之间共享的内容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 
相关问题