2015-09-21 51 views
0

因此,我從GUI的另一頁製作Lable的顯示名稱(內容)。在意識到公共靜態void函數不能改變Displayname,因爲它不是靜態的,我搞砸了Events,並且有一個Handler設置爲在其他頁面發佈事件時運行。VisualC#無法更改控件的顯示名稱

它看起來像這樣

public void UpdateEventHandler(object sender, System.EventArgs e) 
    { 
     System.Windows.Forms.MessageBox.Show("Event Received"); 
     tab1.DisplayName = Globals.tab1Name; 
    } 

當事件熄滅消息框彈出,但顯示名稱不會改變。沒有錯誤,沒有任何東西。

問題不是Globals.tab1Name,因爲我通過MessageBox運行它,並沒有問題。

所以我做了另一個按鈕,在同一頁上拉布勒:

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     tab1.DisplayName = Globals.tab1Name; 
     System.Windows.Forms.MessageBox.Show("clicked"); 
    } 

這一次所有的代碼工作,拉布勒改變的msgbox彈出。

我做了另一個函數,它有兩行代碼,用事件處理程序調用它,再次只有msgbox的作品。但是,當我用按鈕調用相同的功能時,它一切正常。

任何幫助將是偉大的,在此先感謝。

+0

這是WinForms還是WPF?我沒有看到'Label'控件的任何'DisplayName'屬性。 – sab669

+0

您的活動是在UI線程中提出的嗎?很顯然,如果不是,你應該會得到一個錯誤,但是也許你會在其他地方用'try/catch'聲明來隱藏消息。 – hofmeister

+1

這可能是一個交叉線程問題,但不知道您正在使用的UI框架,它很難告訴您如何解決它。 –

回答

0

MessageBoxes暫停執行當前線程。因此,當您首先顯示MessageBox時,第二行不會被更新,因此字符串未更新。

+1

我關閉了消息框,之後什麼都沒有發生 – AFJ

0

嘗試添加顯示名稱作爲表單加載的參數。默認情況下,表單將sender和e作爲參數,但您始終可以添加自己的參數。