簡體   English   中英

在 C# 中調用其他類(Windows 窗體)中的方法

[英]Calling method in other class (Windows Form) in C#

我現在有兩個表單“Form1”和“Form2”我想從“Form2”調用“Form1”中存在的方法“change_lbl()”但是當我在“Form2”中調用該方法時它沒有實現並且無法執行

代碼 Form1:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public void change_lbl()
    {
        lbl_form1.Text = "Its Done !";
    }

    private void btn_gofrm2_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.Show();
    }
}

代碼 Form2:

public partial class Form2 : Form
{
    Form1 frm1 = new Form1();
    public Form2()
    {
        InitializeComponent();
    }

    private void btn_form2_Click(object sender, EventArgs e)
    {
        frm1.change_lbl();
        this.Close();
    }
}

代碼正確,方法調用正確! 您正在創建和使用Form1的新實例而不顯示它,但看起來您希望看到 Application 正在使用且當前處於打開Form默認實例中的更改。 擁有Form1類的打開實例:

Form1 myForm1=(Form1)Application.OpenForms["Form1"];

我建議你看看這個項目。 這可能會解決您的問題。 基本上,當您調用 Form2 並單擊一個按鈕(我的意思是一個 Form2 按鈕)時,Form1 必須“捕獲”該事件,即像 Form2buttonClicked 這樣的事件。 看看這篇文章了解更多。 http://www.codeproject.com/Articles/17371/Passing-Data-between-Windows-Forms

這可能有點無關緊要,但這也可能對您有所幫助http://www.codeproject.com/Articles/14122/Passing-Data-Between-Forms

Form2創建一個EventHander並在Form1訂閱該事件。 工作沒問題

public partial class Form2 : Form
{
    public event EventHandler ButtonClicked;
    public Form2()
    {
        InitializeComponent();
    }

    private void btn_form2_Click(object sender, EventArgs e)
    {
        if(ButtonClicked != null);
           ButtonClicked(sender, new EventArgs());
        this.Close();
    }
}

現在在Form1訂閱事件並調用change_lbl()

private void btn_gofrm2_Click(object sender, EventArgs e)
{
    Form2 frm2 = new Form2();
    frm2.ButtonClicked += (se,ev) => change_lbl();
    frm2.Show();
}

暫無
暫無

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

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