2015-06-01 29 views
0

我有一個加載表單的按鈕,因爲它從數據庫獲取大量數據,並且需要幾秒鐘,所以我想提醒用戶等待。Button.Text在表單可見後發生變化

當我點擊按鈕時,按鈕文字不會改變。

這是我使用的按鈕,單擊代碼:

private void btnItemConfigForm_Click(object sender, EventArgs e) 
      { 
       var itemConfigBtnText = btnItemConfigForm.Text; 
       btnItemConfigForm.Text = "Waiting..."; 

       ItemConfigForm form = new ItemConfigForm(); 
       form.Show(); 

       if (form.Created) 
       { 
        btnItemConfigForm.Text = itemConfigBtnText; 
       } 
      } 

如果我註釋掉

if (form.Created) 
{ 
    btnItemConfigForm.Text = itemConfigBtnText; 
} 

然後按鈕文本更改爲等待新形式的窗口可見。

我錯過了什麼讓窗體可見之前更改按鈕文本。

+7

你問的是錯誤的問題。正確的問題將是_「我如何在後臺加載數據庫條目,以便我的UI線程不會阻塞並且消息繼續處理?」。請參閱[爲什麼不控制更新/刷新中間進程](http://stackoverflow.com/questions/2341731/why-wont-control-update-refresh-mid-process)來解釋。 – CodeCaster

+0

這或多或少是http://stackoverflow.com/questions/1360944/force-gui-update-from-ui-thread的副本。 – Casper

+0

@Casper no,no,no ...不鏈接到該Visual Basic方法。另見[使用-readacted-](http://stackoverflow.com/questions/5181777/use-of-application-doevents)。 – CodeCaster

回答

0

新增

btnItemConfigForm.Update(); 

var itemConfigBtnText = btnItemConfigForm.Text; 
btnItemConfigForm.Text = "Waiting..."; 

這將更新在移動到初始化和示出的形式之前,按鈕控制。

2

簡單的解決方案是增加該行:

btnItemConfigForm.Refresh(); 

此行之後

btnItemConfigForm.Text = "Waiting..."; 

否則,按鈕上的文字將只有當函數結束變化,該功能將重繪表格顯示!

P.s. 如果您希望表單不會被阻止 - 您可以在異步運行中使用功能「顯示」(或新建),那麼當表單將被加載時,您需要事件通知第一個表單

對不起,我的英語... :)

+1

使用control.Update()和control.Refresh( )? –

+1

@PeterCampbell你是對的,control.Update()更好。 我認爲control.Refresh()重繪本身和所有的子控件,但是,control.Update()僅重繪了那些改變了 – Git

相關問題