如何使用另一种形式实例化的类中的方法?

时间:2011-10-31 00:59:24

标签: c# .net winforms forms reference

我在Form1中安装了一个类,我希望将其称为Form2这是可能的吗?

例如:

public TheClass thClass; //member from Form1

/* ... */ 

public void foo() { 
       thClass = new TheClass(...);
} 

表格2:

public void baa() { 
        Form1 form1 = new Form1();
        form1.thClass.MethodName( .. ) ;
}

.baa()中调用Form2方法时,我收到以下错误消息:

Object reference not set to an instance of an object.

最好的方法是什么? ref? 我想这样做不会再次实例化thClass。

我希望这很清楚。提前致谢。

4 个答案:

答案 0 :(得分:2)

您收到此异常是因为thClassnull - 在您的示例中,您必须在使用foo()之前致电thClass

引用类型字段没什么特别之处 - 它们可以像类的任何其他公共字段一样被访问(并且Form1是一个类)。一般情况下,你会想要使用一个属性而避免使用公共字段,因为对它们的任何更改都会破坏现有的使用者 - 这个属性只能由你所表达的拥有类来设置

public TheClass SomeClass {get; private set;}

答案 1 :(得分:0)

你应该调用Foo()初始化“Class”....

public void baa() { 
    Form1 form1 = new Form1();
    form1.foo();
    form1.thClass.MethodName( .. ) ;
}

答案 2 :(得分:0)

因为你在foo方法中初始化thClass,所以你只需在使用thClass之前调用该方法

public void baa() { 
        Form1 form1 = new Form1();
        form1.foo();
        form1.thClass.MethodName( .. ) ;
}

或者您可以直接初始化

public void baa() { 
        Form1 form1 = new Form1();
        form1.thClass = new TheClass(...);
        form1.thClass.MethodName( .. ) ;
}

答案 3 :(得分:0)

最好的方法可能是将Form1中的Class实例传递给Form 2的构造函数。

// Code from Form 1
public partial class Form1 : Form
{
    private TheClass thClass;
    public Form1()
    {
        InitializeComponent();
    }
    public void foo()
    { 
        thClass = new TheClass(...);
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 objForm2 = new Form2(thClass);
        objForm2.Show();
    }
}

// Code From Form 2
public partial class Form2 : Form
{
    private TheClass thClass;
    public Form2(TheClass thCls)
    {
        thClass = thCls;
        InitializeComponent();
    }

    private void baa(object sender, EventArgs e)
    {
        thClass.MethodName( .. );
    }
}
相关问题