.NET versus viele Bilder in Applikation

Celesth

Grünschnabel
Mahlzeit allerseits,

Ich hab ne Anwendung, und habe dort 4 Panels drin, oben, unten, links und der rest filled die Mitte. alle Panels haben ein bg bild. im linken panel habe ich 16 buttons, jeder hat nen bg bild. und dann habe ich auch noch eine selbstgebastelte scrollbar, welche natürlich auch ein bild ist... aussehen tut das dann so:
szsCurrentStatusScreen.jpg

So... sobald ich jetzt diese Scrollbar betätige, das Fenster minimiere und wieder öffne, schon geht das wilde flackern und flickern in der Anwendung um, und man kann prima zu gucken wie .net alle einzelnen controls nach der reihe neu zeichnet... stellt sich die frage, gibts ne möglichkeit das zu beschleunigen ? ich mein bei c++ anwendungen ohne .net ist das doch auch nicht so. Ich hab davon gehört die onPaint methode von Controls.OnPaint zu überschreiben, nur fehlt mir da der skill zu und ich brauche Hilfe oder eben andere Vorschläge wie man das beschleunigen könnte die gesamte Performance.

Um das ganze auch nochmal zu verdeutlichen habe ich hier ein Screenshot vom Menü, sobald ich die Scrollbar betätige...

Bildaufbau.jpg


vielen dank!
 
Ich denke, dass du da schon selber Hand anlegen musst.
GDI+ ist auch nicht sooo schwer...

Ich kenn mich auch nicht wirklich aus aber versuch doch mal die Buttons, die ja nur aus einer Grafik bestehen (oder hast du den Text erst im Programm hinzugefügt?) selber zu zeichnen.

Ich beherrsche leider kein C#. Musste halt umschreiben:
Code:
'Bitmap aus Datei lesen
Dim Pict As New Bitmap("Pfad zu deinem Bild")

'Graphics-Objekt für das Panel holen
Dim g as Graphics = PanelX.CreateGraphics()

'Bild an vorgegebener Position ohne Skalierung zeichnen
g.DrawImage(Pict, 150, 10, Pict.Width, Pict.Height)

'Resourcen freigeben
g.Dispose()
Pict.Dispose()
150 und 10 stehen hierbei für die Koordinaten auf dem Formular.

Ich hoffe dir damit wenigstens ein wenig geholfen zu haben.
 
Ich denke auch, dass es in diesem Fall am besten ist, wenn Du Dir ein eigenes UserControl mit dem gewünschten Aussehen bastelst. Das ist absolut kein Problem und für deine Anwendung müsstest Du jetzt nichtmal auf die GDI+ zurückgreifen.

Du müsstest Dir halt kurz ansehen, wie ein UserControl gebastelt wird, sollte aber eine Sache von 10-15 Minuten sein.

Nitro
 
Eine Frage hätt ich da aber doch noch.... wenn ich AutoScroll des Panels
aktiviere, dann scrollen die Bild-Buttons wunderbar flüssig. Der
Grundlegende Unterschied zwischen dem Scrollen mit AutoScroll und dem
Scrollen mit meiner eigenen Scrollbar ist, das das Backgroundimage des
Panels sich mit den Buttons zusammen bewegt. Bei meiner Variante allerdings
nicht, ich denke, das auch da der Grund liegt, das es so langsam ist...
Stellt sich die Frage, geht es irgendwie das AutoScroll zu emulieren oder so
? Ich will nämlich definitiv als Scrollbalken diesen Knochen haben, welcher
auf der Scrollschiene (Ketten) entlang scrollt. habt iht da evtl. noch
irgendwelche Ideen oder Tipps und Hinweise ? Ich bin für alle Vorschläge
äußerst Dankbar!

Was das Control selber basteln anbelangt, daran habe ich auch gedacht... allerdings müsste ich dann ja kein Scrollcontrol bauen, sonden eher ein Panel Control... was mir persönlich wichtig ist, ist eben als Scrollbalken den Knochen zu haben, wie im Screenshot zu sehen. Gibts nicht vielleicht auch ne Möglichkeit die Scrollbar selbst zu bemalen ? Klar die hat zwar kein onPaint Event aber irgendwie muss das doch gehen, oder was meint ihr dazu ?


PS:
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.CacheText, true);

PS:
Für alle interessierten:
Diese Einträge im Konstruktor der Form, bringen das Flimmern der Controls zu 50% schon in Ordnung, DoubleBuffering :)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück