Laden...

Wie kann ich nach Button-Click Ladeanzeige anzeigen bis Form öffnet?

Erstellt von Rico913 vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.075 Views
R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren
Wie kann ich nach Button-Click Ladeanzeige anzeigen bis Form öffnet?

Ich hab unter anderem ein Button in Form. Wenn dieser gedrückt wird startet im Hintergrund eine Oracle-Abfrage, die ein Moment dauert und das Ergebnis anschließend in Form2 angezeigt wird. Um dem Nutzer nicht den Eindruck zu vermitteln, dass das Programm hängt möchte ich die Rechenzeit visualisieren.

Ein ProgressBar wird wohl nicht möglich sein...
Gibt es eine Möglichkeit den Zeitpunkt abzufangen, wenn Form2 am Bildschirm erscheint?

Viele Grüße
Rico

A
764 Beiträge seit 2007
vor 3 Jahren

Hallo Rico913

Du kannst dich einfach an die entsprechenden Events hängen:

https://docs.microsoft.com/en-us/dotnet/framework/winforms/order-of-events-in-windows-forms

Gruß
Alf

R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren

Danke dir!

Ich hab es jetzt so:




        Form_Wait frm_Wait = new Form_Wait();

        private void Form_ProLayer_Load(object sender, EventArgs e)
        {
            frm_Wait.ShowDialog();
            ......
         }

        private void Form_ProLayer_Shown(object sender, EventArgs e)
        {
            frm_Wait.Dispose();
        }



Aber leider wird das Form_Wait nicht automatisch geschlossen.

R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren

Weiß nicht warum, aber ohne was zu ändern läuft es jetzt. Danke für den Hinweis 😄

309 Beiträge seit 2020
vor 3 Jahren

Das ist aber nicht gerade sauber, hau es lieber in einen extra Thread, warte bis der fertig ist, und schließe dann deine Waiting Form.

3.825 Beiträge seit 2006
vor 3 Jahren

Ich mache es so dass jede Aktion, die länger als eine Sekunde braucht, einen Warte-Hinweis bekommt (Splash-Screen).

Am einfachsten geht das mit einem Label, das man temporär erzeugt :


Label lbl = new Label();
lbl.Size = new Size(300, 120);
lbl.Location = new Point(parentcontrol.Width / 2 - lbl.Width / 2, parentcontrol.Height / 2 - lbl.Height / 2);
lbl.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
lbl.Text = "        " + message + "       ";
lbl.BorderStyle = BorderStyle.FixedSingle;
parentcontrol.Controls.Add(lbl);
lbl.BringToFront();

Wenn man eine Fortschrittsanzeige anzeigt unbedingt asynchron arbeiten, wie oben schon erwähnt.

Auch eine Funktion für "Abbrechen" vorsehen.

Gehört für mich alles zu einer guten App.

Ich ärgere mich selber immer sehr wenn ich auf einem Button rumklicke und nichts passiert.

Hab deshalb in einem Web-Shop das tiefgefrorene Hundefutter 3 Mal bestellt, weil nach dem Klick nichts passiert ist. Zum Glück hatte ich genug Platz in der Tiefkühltruhe.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

W
955 Beiträge seit 2010
vor 3 Jahren

Dann solltest du die App aber nicht mehr verwenden wenn sie den Status des Einkaufswagens nicht speichert, von Idempotenz der Http-Aktionstypen ganz zu schweigen.