簡體   English   中英

如何使用另一種形式實例化的類中的方法?

[英]How can I use method from an class instantiated in another form?

我在Form1有一個instaciaded類,我想把它稱為Form2它有可能嗎?

例如:

public TheClass thClass; //member from Form1

/* ... */ 

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

表格2:

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

我在Form2調用.baa()方法時得到以下.baa()

Object reference not set to an instance of an object.

最好的方法是什么? ref 我想這樣做不會再次實例化thClass。

我希望這很清楚。 提前致謝。

你得到這個異常因為thClassnull - 在你的例子中你必須在使用thClass之前調用foo()

引用類型字段沒有什么特別之處 - 它們可以像類的任何其他公共字段一樣被訪問(並且Form1是一個類)。 一般情況下,你會希望使用屬性而避免使用公共字段,因為對它們的任何更改都會破壞現有的使用者 - 這個屬性只能由你可以表達為的擁有類來設置

public TheClass SomeClass {get; private set;}

你應該調用Foo()來啟動“thClass”....

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

因為你在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( .. ) ;
}

最好的方法可能是將Form1中的TheClass實例傳遞給Form2的構造函數。

// 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( .. );
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM