2016-07-27 5 views
0

Nach einem Klick auf eine Schaltfläche zeige ich ein Fortschrittsformular an und starte eine Aufgabe. Ich möchte den Button deaktivieren oder den Fortschritt zu einem Modal machen, so dass nichts auf dem Hauptformular angeklickt werden darf, bis der Fortschritt abgeschlossen ist.Die Fortschrittsleiste sollte die Schaltflächen im Hauptfenster einschränken, auf die geklickt werden soll.

I Tried Besitzer Referenz als Argument übergeben, wenn der Fortschrittsbalken Form der Showdialog aufrufen:

m_oProgressBarForm = new ProgressBarForm(); 
m_oProgressBarForm.ShowDialog(this); 

Bitte helfen, wie kann ich verhindern, dass Benutzer wieder auf die Schaltfläche klicken, um durch das Hauptfenster Vergrauung oder machen Sie die Tasten nicht klickbar oder macht das Fortschrittsbalkenfenster als das modale?

Momentan kann der Benutzer erneut auf die Schaltfläche klicken, und eine andere Instanz wird gestartet, wodurch die Anwendung nicht mehr verwendbar ist und die Anwendung mithilfe des Task-Managers manuell beendet werden muss.

+2

Sie müssen wahrscheinlich noch mehr Code für den Kontext hinzufügen – Brandon

+0

Ihr Fortschrittsformular sieht aus wie es modal ist. Es ist uns nicht klar, warum du sagst, dass es nicht so ist. – LarsTech

+0

Ja, aber es dient nicht dem Zweck, den es sollte. Können Sie vorschlagen, wie Sie dieses Problem beheben können? – PSDebugger

Antwort

0

Wenn Sie ein Formular mit ShowDialog() anzeigen, wird der folgende Code erst ausgeführt, nachdem das Dialogfeld geschlossen wurde. Aber Sie müssen wahrscheinlich das Fortschrittsbalkenformular anzeigen und dann einige Operationen ausführen und dann das Formular schließen. Sie können Ihr Fortschrittsformular nicht als modal anzeigen.

Stattdessen können Sie Ihre Hauptformular deaktivieren und die Ihre Fortschritte Form zeigen, indem sie die Hauptform als ihre Mutter Einstellung, dann führen Sie die zeitaufwendige Aufgabe und schließlich, schließen Sie die Fortschritte bilden und ermöglichen, die Hauptform:

private async void Button1_Click(object sender, EventArgs e) 
{ 
    var f = new Form(); //Your progress form 
    f.Show(this); 
    this.Enabled = false; 
    try 
    { 
     //For example a time-consuming task 
     await Task.Delay(5000); 
    } 
    catch (Exception ex) 
    { 
     //Handle probable exceltions 
    } 
    f.Close(); 
    this.Enabled = true; 
    this.BringToFront(); 
} 
Verwandte Themen