2016-05-02 79 views
-1

我正在試圖用動畫做簡單的數據傳輸到數據庫。我成功激活了進度條,但我的百分比標籤沒有改變價值和動畫。 我的代碼如下:在foreach循環中標籤元素的改變和動畫

pBar.Maximum = query.Count(); //pBar is progress bar 
foreach (var cell in query) 
{ 
    pBar.Value++; 
    lblYuzde.Text = "%" + (pBar.Value/pBar.Maximum) * 100; //lblYuzde is label 
    Application.DoEvents(); 
    //Do events 
} 

進度條是好與animaton工作,但標籤不會改變。我的錯誤是什麼?

+0

,什麼樣的價值是'lblYuzde.Text'傳遞時,在第一次迭代這條線。 'lblYuzde.Text =「%」+(pBar.Value/pBar.Maximum)* 100;如果您想要表示Text屬性中的值,則需要將整數值轉換爲字符串。使用調試器,你將很容易解決這個簡單的錯誤。也不要嘗試使用'Application.DoEvents()',你可能使用'BackgroundWorker'獲得更好的結果,這裏也有大量的例子。 – MethodMan

+1

您發佈的代碼應該會導致您的標籤直接進入%100。你沒有什麼可以放慢速度來實際顯示任何處理。建議避免使用Application.DoEvents並使用BackgroundWorker。 – LarsTech

+0

@MethodMan我相信這會起作用,''string'+ 12'產生''string12'''。這裏的問題似乎是整數除法:由於「pBar.Value」總是小於「pBar.Maximum」,因此除法總是爲「0」。正確的方法是'「%」+(100 * pBar.Value/pBar.Maximum)'。無論如何,在循環中執行此操作並調用'Application.DoEvents'是一種不好的方法。考慮使用計時器或異步方法。 –

回答

1

你的操作僅具有整數值的結果可能是不對的。

您必須施加其中一個值來加倍。

lblYuzde.Text = "%" + ((double)pBar.Value/pBar.Maximum) * 100; //lblYuzde is label 

編輯: 欲瞭解更多信息,請參閱:https://msdn.microsoft.com/en-us/library/3b1ff23f.aspx當您使用調試器來逐步執行代碼

0

您需要添加一行

foreach(...) 
{ 
    ... 
    lblYuzde.Refresh();// or lblYuzde.Invalidate(); 
}