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?
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.windows.forms.control.suspendlayout(VS.80).aspx) greets
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?
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.
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.
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?
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.