2012-08-16 40 views
0

刷新我使用兩種形式:如何修改表單,並從另一種形式

Form1有BUTTON1

窗體2包含BUTTON2和Panel1的

我的項目開始使用窗體2。然後,我就BUTTON2單擊顯示Form1中

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

然後在Form1上,我對Button1的點擊隱藏Panel1的Form2上

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

displayInit()裏面Form2的方法:

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

但由於刷新問題,面板不隱藏,請任何想法?

+1

在button1_Click中添加'FormInstance.Show()'以查看您創建的新窗體。有許多優秀的書籍可以幫助您學習面向對象的編程。 – 2012-08-16 22:22:46

+0

謝謝Hans,有沒有辦法將更改傳遞給最初顯示的Form2? – 2012-08-16 22:45:31

回答

1

有兩種形式(或任何兩種類)彼此交談的標準方式是事件。

在你的情況,這增加了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(); 
    } 

我希望這有助於一點。

+0

太棒了,這個工作就像一個魅力,非常感謝你Holger。 – 2012-08-16 23:30:42

+1

@AlphaBird,不客氣。我對'Form1'的'button1_Click'事件做了一點小修改來檢查'null'。 (如果沒有訂閱該事件的偵聽器,則返回一個'null',如果我們沒有檢查它,這將拋出異常。) – 2012-08-16 23:38:23