mikrocontroller.net

Forum: PC-Programmierung Label gleichzeitg refreshen


Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
angenommen ich habe 20 labels und setze deren visible-eigenschaft per 
knopfdruck alle auf false, dann sind alle labels auf einem klick 
verschwunden. setze ich deren visible-eigenschaft nun per knopfdruck 
alle wieder auf true, so baut sich jedes label einzeln auf, selbst wenn 
diese nicht verändert wurden.
gibt es eine möglichkeit alle labels auf einmal anzeigen zu lassen?

Autor: Chris ... (dechavue)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Hieraus:Beitrag "Visual Basic Grafikaufbau sehr langsam" schließe ich, dass 
du immernoch mit VB.Net arbeitest.

Hier könntest du mal SuspendLayout + ResumeLayout versuchen.
(http://msdn.microsoft.com/de-de/library/system.win...)

greets

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für deine antwort,

leider haben die methoden "SuspendLayout" und "ResumeLayout" nicht das 
Problem behoben oder ich benutze diese falsch....

hier mal mein code in VB.Net beim knopfdruck...

me.Suspendlayout()

for i=0 to 19

     me.label(i).visible = true

next

me.ResumeLayout()


die labels bauen sich nach wie vor nacheinander auf.
kennt jemand weiteren rat?

Autor: Chris ... (dechavue)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Schade, einen Vesuch wars wert, ich war mir nicht mehr sicher ob dadurch 
nur die Layout- oder auch die Zeichenlogik gestoppt wird.

Ich denke, du hast schlicht und ergreifend zu viele Controls auf deinem 
Form.
Ich habe es mit 200 Labels getestet und diese erscheinen/verschwinden 
alle gleichzeitig.

Was du noch versuchen könntest, ist die Labels in ein Panel 
zusammensufassen und dieses anzeigen/verstecken.

Als wirklich Dirty-Hack um das anzeigen etwas zu beschleunigen kannst du 
die unsichtbaren Labels mit Control.Remove zu entfernen, ihre Visible 
auf true setzten und sie mit Control.AddRange auf einen Schlag wieder 
hinzuzufügen.
Das bewirkt, dass das ganze zwar zeitverzögerter aber dann auf einen 
Schlag kommt (getestet mit 1000 Labels)

Ich würde dir aber dringend raten, die Anzahl deiner Controls zu 
vermindern, bzw Teile in eigene (User)Controls zusammenzufassen.

Autor: Entlöter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibts bei VB.NET nicht auch die Property
frmXYZ.DoubleBuffered = true;
kann mich schwach daran erinnern.

Auch aus meiner Erinnerung:
DoEvents
Weiß allerdings nicht ob es diese Dinge bei VB.NET noch gibt und ob sie 
in deinem Fall helfen.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank für deine antwort,


ich weiß jetzt auch woran es liegt das das bild bei mir schon nach 20 
labels anfängt zu flimmern, und zwar am hintergrundbild der form!
wenn ich dieses entferne, dann klappen die oben genannten 
lösungsvorschläge.
nur will ich ungern auf mein hintergrundbild verzichten, hab es auch 
schon soweit wie möglich komprimiert (jpg-datei, 1280x1024 auflösung, ca 
1MB).
gibt es nicht vielleicht eine möglichkeit das bild einmal zu laden und 
dann niewieder?

Autor: Chris ... (dechavue)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Speicher wird das Bild nach dem Laden unkomprimiert abgelegt, und 
dieses verhältnismäsig große Bild (~5MB) muss bei jedem Neuzeichnen 
(jedem Ändern einer visible) komplett neu gezeichnet werden.
Als einfachste Möglichkeit könntest du versuchen, vor deiner Schleife 
zum Ändern der Visibles das Hintergrundbild zu entfernen und es danach 
neu zu setzten, das reduziert die Anzahl der Zeichenvorgänge des Bildes 
auf 1x pro Visiblegruppe.
Sollte es dadurch zu sehr flackern, kannst du noch versuchen 
DoubleBufferd einzuschalten.
Eine weitere Lösung wäre, das Bild in Segmente aufzuteilen, welche du im 
OnPaintBackground mit e.Graphics.Drawimage zeichnest, dort kannst du 
meines wissens auch prüfen welcher Teil gezeichnet werden muss, und dann 
nur die jeweiligen Segmente zeichnen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.