[英]How to make Form1 call a method by command of Form2
我每次都被困在這里,很顯然,我永遠找不到規則書來運行事情的方法。 :(我在Form1中有一個方法,我想從Form2中調用它。或者:由Form2命令Form1。我從Form2中調用它,但是隨后我得到了一個NullPointerExp:
表格2:
private Form1 f1;
public Form2(Form1 of)
{
InitializeComponent();
this.f1 = of;
}
private void buttonOK_Click(object sender, EventArgs e)
{
f1.callMethod(3,3,1);
Form.ActiveForm.Close();
}
此方法在放置在Form1中的面板中創建一個按鈕數組(猜測存在問題)。
我試圖將callMethod()的參數傳遞給Form1,以傳遞給類變量。 無論如何,我肯定這是不好的風格。 畢竟仍然必須調用該方法。
我有一個在Form1中創建某種偵聽器的想法:禁用Form1,直到在Form2中按OK為止,然后調用Form2傳遞的callMethod +傳遞的參數,或者取消。
只是不知道哪種方法是最好的。 我應該在Form1中傳遞參數並進行監聽嗎? 還是真的嘗試讓callMethod在Form1中工作(如果在Form2中進行了調用)? 有人知道嗎?
提前致謝!
您需要像我的第一個評論一樣將當前的form1實例傳遞給構造函數。 否則,它為null,這就是null異常的來源。 您應該會遇到編譯錯誤,因為form2的構造函數需要一個參數,除非您有一個默認的不接受未在此處顯示的參數的參數。
在Form1中更改您的方法以執行此操作:
Form2 userF = new Form2(this); // pass this to the constructor
userF.Show();
這是指您對象的當前實例,在本例中是調用Form2的Form1對象的當前實例。 這將調用帶有參數的Form2的構造函數,並且空引用異常將消失。 如果您熟悉此關鍵字,則此關鍵字等效於VB.NET中的Me關鍵字。
您可以將方法設為靜態,並通過調用以下方法來調用它:
Form1.DoSomething();
根據您的需要,它是:
public Form2()
{
InitializeComponent();
}
private static void buttonOK_Click(object sender, EventArgs e)
{
Form1.DoSomething(parameters);
Form.ActiveForm.Close();
}
Form1中的函數將如下所示:
public static void xxx(string x)
{
Console.WriteLine(x);
}
區別在於靜態屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.