0

私は2つのフォームを使用しています:

Form1 には button1 が含まれています

Form2 には、button2 と Panel1 が含まれています

私のプロジェクトは Form2 を使用して開始します。次に、button2 をクリックして Form1 を表示します

    private void button2_Click(object sender, EventArgs e)
    {
        Form1 Frm = new Form1();
        Frm.Show();
    }

次に Form1 で、button1 をクリックして Form2 の Panel1 を非表示にします。

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 FormInstance = new Form2();
        FormInstance.displayInit();
        FormInstance.Refresh();
    }

displayInit() は Form2 内のメソッドです。

    public void displayInit()
    {
        panel1.Visible = false;
    }

しかし、リフレッシュの問題により、パネルは非表示になりません。

4

1 に答える 1

2

2 つのフォーム (または任意の 2 つのクラス) を相互に対話させる標準的な方法は、イベントを使用することです。

Form1あなたの場合、これをコードの先頭に追加します。

public event ClosePanelHandler ClosePanel;
public delegate void ClosePanelHandler(object sender, EventArgs e);

次に、Form1の Button1_Click イベントで (これによりイベントが発生します):

 private void button1_Click(object sender, EventArgs e)
    {
     if (ClosePanel != null){
       ClosePanel(this, new EventArgs());
    }}

-

最後に、Form2アクションを実行するために、イベントを処理する (そしてリッスンする) 必要があります。

 private void HandleCloseRequest(object sender, EventArgs e)
    {
     panel1.Visible = false;
    }

また、修正

private void button2_Click(object sender, EventArgs e)
    {
        Form1 Frm = new Form1();
        Frm.ClosePanel += HandleCloseRequest;
        Frm.Show();
    }

これが少し役立つことを願っています。

于 2012-08-16T23:18:06.040 に答える