簡體   English   中英

如何通過Form2的命令使Form1調用方法

[英]How to make Form1 call a method by command of Form2

我每次都被困在這里,很顯然,我永遠找不到規則書來運行事情的方法。 :(我在Form1中有一個方法,我想從Form2中調用它。或者:由Form2命令Form1。我從Form2中調用它,但是隨后我得到了一個N​​ullPointerExp:

表格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.

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