2015-05-25 49 views
0

我有2 Form1和Form2的形式。在Form1中,我有一個按鈕,它將在按鈕單擊時打開Form2。在Form2中,它使用Form1中的標籤文本進行一些設置。當關閉Form2時,Form1中的標籤文本將基於該設置進行更新,但是我可以使標籤文本更新。以下是更新Form1中標籤文本的代碼。我對文本進行了硬編碼以模擬情況。強制Winform控件更新

Form1中

public void languageChange() 
     { 
      labelControl5.Text = "AAAAAA"; 
      labelControl5.Invalidate(); 
      labelControl5.Update(); 
      labelControl5.Refresh(); 
      Application.DoEvents(); 

     } 

在窗口2,我有下面的代碼火languageChange功能在Form1上。

private void innoLanguage_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     Main_new main = new Main_new(); 
     main.languageChange(); 
    } 

當form2關閉但它不更新標籤文本時,它調用了Form1中的函數。

我覺得我犯了一個錯誤,但我無法弄清楚。我如何做這項工作,請幫助。

+0

您正在創建一個新的Form1,它不是打開您的Form2並且不可見的一個,嘗試在構造函數中傳遞創建表單或在使用show或showdialog時分配擁有的表單來分配所有權。 –

回答

1

首先,當您更改其Text變量時,不需要使標籤失效,它會自動重新繪製控件。

其次當Form2關閉您創建了一個新的Main_new,叫languageChange()就可以了,但後來實際上並沒有顯示或顯示形式。我不確定情況是什麼,但如果已經有Main_new表單打開,則不需要創建新表單,只需獲取Form2的父級表單(這將是Main_new已經打開),然後將其作爲Main_new ,然後致電languageChange()

private void innoLanguage_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    ((Main_new)this.Parent).languageChange(); 
} 

如果Main_new不打開Form2改變它,不管用什麼形式的名稱。

+0

嗨AlphaDelta,Main_New窗體在Form2打開時保持打開狀態。我使用菜單打開Form2。當我關閉form2時,它會在Form1菜單中單擊時顯示錯誤「object not set an instance」。下面是我打開Form2的代碼,new innoLanguage()。ShowDialog();什麼錯誤? –

+0

'Menu'是打開'innoLanguage'的表單的名稱嗎? – AlphaDelta

+0

菜單是MenuStrip。表單名稱爲Main_New private void languageSettingToolStripMenuItem_Click(object sender,EventArgs e) {innoLanguage()。ShowDialog(); } –