4 Stimmen

Gibt es eine Möglichkeit, alle UI-Steuerelemente zu laden, bevor sie angezeigt werden? C# winform

Ich habe ein kompliziertes Win-Formular mit vielen Steuerelementen und sperrige repaints, Steuerelemente Größenänderung und Positionierung nach Benutzer-Bildschirm, dies bewirkt, dass das Formular angezeigt werden, während einige Rendering und repainting.

Gibt es eine Möglichkeit, die UI zu laden und vor der Anzeige vorzubereiten, d.h. die endgültige UI zu zeigen, nachdem die gesamte Übermalung abgeschlossen ist?

Wenn ich einen Splash-Screen verwende, bevor ich das Hauptformular lade, wie soll ich das machen?

Danke

4voto

Andy West Punkte 12004

Vielleicht mit AussetzenLayout() y ResumeLayout() funktionieren würde.

Von MSDN:

Das SuspendLayout und das ResumeLayout werden im Tandem verwendet, um mehrere Layout-Ereignisse zu unterdrücken, während Sie mehrere Attribute des Steuerelements anpassen. Zum Beispiel würden Sie normalerweise die Methode SuspendLayout Methode aufrufen und dann die Eigenschaften Size, Location, Anchor oder Dock Eigenschaften des Steuerelements einstellen und dann die Methode ResumeLayout-Methode aufrufen, damit die Änderungen wirksam werden.

2voto

Ken Punkte 1770

@Kevin hat die richtige Idee, und das ist der Ansatz, den ich verfolgen würde:

  1. Legen Sie einen Bereich auf Ihr Formular und setzen Sie Dock auf Füllen, so dass er das gesamte Formular abdeckt.
  2. Legen Sie eine ProgressBar in der Mitte des Bedienfelds ab, wobei die Eigenschaft Stil auf Marquee eingestellt ist. Dadurch wird es ständig blättern.
  3. Rufen Sie nun am Ende des Konstruktors Ihres Formulars (oder des Load-Event-Handlers, falls Sie diesen verwenden) die SendToBack()-Methode Ihres Panels auf, um die vollständig gerenderten Steuerelemente anzuzeigen.

1voto

Kevin Stafford Punkte 160

Sie könnten ein "Lade"-Panel erstellen und Ihr gesamtes Formular vorübergehend damit abdecken, während die Daten geladen werden. Sie könnten vielleicht versuchen, PerformLayout auf Ihrem Layout-Manager vor dem Aufruf von Form.Show aufzurufen, um sie zu erhalten, um die Layout-Aufgabe zu laden.

Ein Begrüßungsbildschirm ist ganz einfach. Sie können einfach ein oberstes Formular anzeigen und es schließen, wenn Ihr Hauptformular nicht mehr angezeigt wird, vielleicht im Ereignis "Aktiviert".

1voto

IAbstract Punkte 19409

In Ihrer Hauptrolle:

    MyMainForm hostInterface;

    static void Main( )
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        hostInterface = new HostInterface();
        // do some stuff to get the form ready
        // here you can optionally instance a splash screen
        MySplashScreen splash;
        hostInterface.Load += splash.Close();    // <- might not be 100% accurate
        splash = new MySplashScreen();

        Application.Run(hostInterface);
    }

Schauen Sie, wie das für Sie funktioniert. Der Unterschied ist, dass Sie das Formular instanziieren, bevor Sie etwas ausführen. Ich habe eine Option für die Instanzierung eines Startbildschirms eingebaut.

Vergleichen Sie die obige Darstellung mit dem automatisch generierten Standardcode:

static void Main( )
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new MyMainForm());
        }

Auch ohne das Hinzufügen eines Startbildschirms habe ich festgestellt, dass die Deklaration der MyMainForm myform = new MyMainForm() hat sich das Laden aller Kontrollen vor dem Application.Run(new MyMainForm())

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X