2016-05-02 6 views
-1

Ich versuche, einfache Datenübertragung in die Datenbank mit Animation zu machen. Es ist mir gelungen, die Fortschrittsleiste zu animieren, aber mein Prozent-Label hat den Wert und die Animation nicht geändert. Mein Code ist unten:Label-Element Änderung und Animation in foreach-Schleife

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 
} 

Fortschrittsbalken gut mit animaton arbeiten, aber Etikett ändern nicht. Was ist mein Fehler?

+0

, wenn Sie den Debugger durch den Code zu dem Schritt, welcher Wert die 'lblYuzde.Text' ist, wenn Sie diese Zeile in der ersten Iteration passieren. 'lblYuzde.Text ="% "+ (pBar.Value/pBar.Maximum) * 100;' Sie müssen den Integer-Wert in einen String konvertieren, wenn Sie den Wert in einer 'Text'-Eigenschaft darstellen möchten. Verwenden Sie den Debugger und Sie können diesen einfachen Fehler leicht beheben. versuchen Sie auch nicht 'Application.DoEvents()' zu verwenden, Sie könnten wahrscheinlich bessere Ergebnisse mit einem 'BackgroundWorker' erreichen. Viele Beispiele dafür sind ebenfalls online. – MethodMan

+1

Ihr veröffentlichter Code sollte dazu führen, dass Ihr Label direkt auf% 100 gesetzt wird. Sie haben nichts zu verlangsamen, um irgendwelche Bearbeitungen anzuzeigen. Vermeiden Sie Application.DoEvents und verwenden Sie wie vorgeschlagen einen BackgroundWorker. – LarsTech

+0

@MethodMan Ich bin sicher, das würde funktionieren, '" string "+ 12' ergibt" string12 "'. Das Problem scheint hier eine Integer-Division zu sein: Da 'pBar.Value' immer kleiner als' pBar.Maximum' ist, ist die Division immer '0'. Der richtige Weg wäre '"% "+ (100 * pBar.Value/pBar.Maximum)'. Wie auch immer, dies in einer Schleife zu tun und 'Application.DoEvents' aufzurufen, ist ein schlechter Weg. Denken Sie über einen Timer oder eine asynchrone Methode nach. –

Antwort

1

Ihr Betrieb nur hinzuzufügen, hat ganzzahlige Werte Ihr Ergebnis nicht richtig sein könnte.

Sie müssen einen der Werte doppelt eingeben.

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

EDIT: Weitere Informationen finden Sie unter: https://msdn.microsoft.com/en-us/library/3b1ff23f.aspx

0

benötigen Sie Linie

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