Announcement

Collapse
No announcement yet.

Form mit vielen Pictureboxen/Labels baut sich langsam auf

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Form mit vielen Pictureboxen/Labels baut sich langsam auf

    Ich habe eine Windows Form, die ich bei Erzeugung mit recht vielen Pictureboxen bestücke. Diese Pictureboxen laden einige Bilder im *.PNG-Format. Dies benutze ich wegen der Transparenten Anteile un der Dateigröße wegen. Allerdings habe ich das gleiche Problem bei Bildern im BMP, GIF und JPG - Format.
    (Projekt: HMI, ACHTUNG: Damit das Projekt funktioniert müsst ihr nach erstmaligen Erstellen des Projektes den Ordner "_1600" mit den Bildern in das "bin/Debug" bzw. "bin/release"-Verzeichnis kopieren)

    Problem dabei ist, dass die Elemente auf der Form beim Anzeigen ganz unschön aufpoppen. Erstens dauert der Aufbau schon recht lange und zweitens sind diese leeren weißen Vierecke der Pictureboxen auch häßlich.

    Ich habe im Netz schon nach den verschiedensten Möglichkeiten gesucht das ganze zu beschleunigen: DoubleBuffered, SuspendLayout, Ich habe das Fenster erst unsichtbar gemacht und wollte es nach der Objekterzeugung anzeigen, Ich habe das Fenster weit außerhalb des sichtbaren Bereiches erzeugt und dann verschoben, etc. Ich habe mir auch alle Forumbeiträge was das Zeichnen auf eine Form und in Pictureboxen angeht angeguckt und keine Lösung gefunden. Die Geschwindigkeit ändert sich auch mit dem Release Build ohne Debugger nicht!

    Das gleiche Problem stellt sich bei meinem Testprojekt (Projekt: TestLabels). Ich plaziere darauf 5000 Labels (ist auch bei kleineren Zahlen schon sichtbar) und zeige diese nur an und die Aufbauzeiten des Formulars sind der Horror.

    Ich habe zum Testen meine beiden Projekte mit angehängt. Es wäre schön, wenn ihr Euch bei der Lösung des Problems konkret auf diese beziehen könntet damit ich das besser nachvollziehen kann!

    Ich bin zwar Programmierer, aber ich habe mir C# selber beigebracht. Vielleicht gibt es ja irgendwo einen Schalter, den ich nur umlegen muss, damit das alles schneller läuft. Schön wäre ein einzeiliger Befehl wie "Project.MachDasAllesSchneller(this);" ;-) Vielen Dank für Eure Mühe!


    Hier der Quelltext für meine kleines Testprojekt mit den Labels. Wichtiger ist mir aber das Projekt "HMI" mit den Pictureboxen. Nur ist hier der Quellcode zu lang:
    [highlight=c#]
    using System;
    using System.Drawing;
    using System.Windows.Forms;

    namespace testApp
    {
    public partial class Form1 : Form
    {

    Label[] lblTest = new Label[5000];

    public Form1()
    {
    InitializeComponent();
    }

    private void Form1_Load(object sender , EventArgs e)
    {
    this.Top = 0;
    this.Left = 0;
    this.Width = 1600;
    this.Height = 1200;
    }

    private void button1_Click(object sender , EventArgs e)
    {
    this.Hide(); // Fenster verstecken
    Random x = new Random();
    for (int i = 0; i < lblTest.GetLength(0); i++)
    {
    lblTest[i] = new Label()
    {
    Visible = true
    , Top = x.Next(1190)
    , Left = x.Next(1500)
    , Height = 15
    , Width = 100
    , Text = x.Next(1000000000).ToString()
    , BackColor = Color.Aquamarine
    , Parent = this
    };
    }
    this.Show(); // Fenster wieder anzeigen
    }
    }
    }
    [/highlight]
    Attached Files

  • #2
    Reichen dir die Antworten hier und hier noch nicht? Jürgen

    Comment

    Working...
    X