2016-04-11 13 views
1

Ich habe eine MDI-Anwendung in Winforms erstellt. Beim Start wird zunächst ein Anmeldebildschirm angezeigt, in den der Benutzer die E-Mail-Adresse und das Passwort seines Kontos eingibt. Dies wird online mit einem Web-Service validiert. Nach der Validierung verstecke ich dieses Login-Formular und starte ein Eltern-MDI-Formular. Von hier aus kann der Benutzer Kinder Formular starten und starten Sie das Programm. Einige vereinfachte Code ist unten.C# winforms Blockieren der Verwendung meines Programms, wenn Internet ausfällt

//pass along email and pass to web service 
amazonaws.WebService1 MyService = new amazonaws.WebService1(); 
result = Remote.CheckUser(MyService, email, pass); 

//process results 

//if ok, launch parent 
Main m = new Main(); 
m.Show(); 

//start timer which checks for internet every minute 
timer1.Start(); 

//hide this form since closing it will exit altogether 
this.Hide(); 

Das Programm wird jede Minute im Hintergrund geprüft wird, ob eine Internetverbindung verfügbar ist, und wenn es nicht den Fall, ich Pop die ursprüngliche Anmeldung Form bis zu dem Benutzer zu ermöglichen, wieder zu verbinden, wenn sie Internet haben.

Das funktioniert gut, aber ich habe ein Problem, dass, wenn das Login-Formular erscheint, da ich 'login.Show()' aufrufen, das Programm im Hintergrund immer noch verwendbar ist. Ich möchte die Nutzung des Programms blockieren, während das Anmeldeformular angezeigt wird.

Ich versuchte es als 'form.ShowDialog()' zu starten, aber nachdem ich ihre Informationen validiert und versteckt habe, schaltet sie meine gesamte Anwendung aus, da das Ausblenden eines modalen Fensters dieselbe Wirkung hat wie das Schließen und seitdem Ursprünglich in Application.Run (Login()) aufgerufen, wird es meine Anwendung geschlossen, wenn geschlossen/versteckt.

Alle Ideen sind willkommen.

+3

Ihre Hauptform aus dem Application.Run starten. Öffnen Sie das Anmeldefenster in seinem Konstruktor oder in seinem Form_Load-Ereignis. – Steve

+0

Leider ist das keine Option. Mein Code oben ist Pseudo-Code, es gibt eine Menge mehr nach der ersten Anmeldung, und das Hauptformular kann nicht gestartet werden, ohne sich bereits einzuloggen. Zumindest ohne größere Änderungen vorzunehmen. – nerdalert

+0

Haben Sie darüber nachgedacht, alle Elemente auf dem Formular zu deaktivieren? Der Benutzer könnte das Formular zwar sehen, aber nichts bearbeiten? –

Antwort

0

Ich landete einfach deaktivieren alle Steuerelemente auf allen Formen, wenn das Internet trennt, abgesehen von der Anmeldung.

Ich tat dies, indem ich diese Funktion in meiner Elternform hatte und sie anrief, wenn das Internet trennt. Wenn es im übergeordneten Formular gespeichert ist, werden alle untergeordneten Formularsteuerelemente deaktiviert.

public void ToggleControls() 
{ 
    foreach (Control c in this.Controls) 
    { 
     c.Enabled = !c.Enabled; 
    } 
} 

Ich nenne es wie so

var parent = Application.OpenForms.OfType<ParentMain>().FirstOrDefault(); 
if (parent != null) 
{ 
    parent.ToggleControls(); 
}