2017-02-17 4 views
-2

so habe ich dieses frmUser aber ich habe zu schließen frmPass zu nennen (was ich anstelle von Show() mit ShowDialog() genannt), die zuerst bestätigen, wenn der Benutzer ein Administrator ist aber das Problem ist, wenn ich die Codes auszuführen unterWie ein Formular zu schließen, die eine andere Form mit Showdialog() geöffnet wurde

frmUser us = new frmUser(lblEID.Text, lblAdmin.Text, lblType.Text); 
us.Hide(); 
this.Hide(); 

frmPass nur versteckt sich und nicht zusammen mit frmUser. Auch hier ist mein Code frmPass von frmUser

frmPass pass = new frmPass(lblAID.Text, lblName.Text, lblType.Text, "User Module"); 
pass.ShowDialog(); 
+0

ist nicht klar, wo der Code liegt. Wo ist der erste Teil? –

Antwort

1

In Ihrem Passwort Formular aufrufen, sollten Sie DialogResult Eigentum dieser Form eingestellt. Zum Beispiel; Wenn Ihr Benutzer auf die Schaltfläche frmPass klickt, klickt er auf die Schaltfläche Ok. Der Code überprüft, ob Benutzername und Passwort gültig sind. Wenn alles in Ordnung ist, setzen Sie das Dialog-Ergebnis wie folgt OK:

das Formular wird geschlossen. In frmUser können Sie, wenn nötig, überprüfen, was DialogResult von frmPass Form ist, wie folgt aus:

frmPass pass = new frmPass(lblAID.Text, lblName.Text, lblType.Text, "User Module"); 
DialogResult dr = pass.ShowDialog(); 

if (dr == DialogResult.Ok) 
{ 
    //do code if form is closed with OK dialog result 
} 
else 
{ 
    // some warning to user... 
} 
0

Das Problem ist, dass Sie die falsche instace von frmUser zu verbergen versuchen. Ich nehme an, dass die erste Code-Passage innerhalb der Klasse frmPass liegt. Dort erstellen Sie eine neue Instanz, die Sie zu verstecken versuchen. Aber Sie möchten die ursprüngliche Instanz ausblenden.

Wie Nino bereits vorgeschlagen habe, würde ich auch vorschlagen, die DialogResult zu verwenden, um zu überprüfen, ob der Admin bestätigt ist. Aber vielleicht hast du schon einen anderen Mechanismus. Trotzdem müssen Sie das Versteck Codezeile in die Klasse platzieren frmUser nach dem Aufruf von pass.ShowDialog();

private void button1_Click(object sender, EventArgs e) 
{ 
    formPass pass = new formPass(); 
    pass.ShowDialog(); 

    if(AdminIsConfirmed) 
    { 
     this.Hide(); 
    } 
} 

lassen Sie die anderen this.Hide() im frmPass, dass zu schließen.

EDIT

andere Möglichkeit, das frmUser Beispiel in den Konstruktor von frmPass und hat eine Variable vom Typ frmUser in frmPass passieren würde. Sie müssen es nur überlasten:

public partial class formPass : Form 
{ 
    formUser us; 
    public formPass(/* all that stuff that you have plus*/, formUser us) 
    { 
     InitializeComponent(); 

     this.us = us; 
    } 

Anruf frmPass wie dies jetzt:

frmPass pass = new frmPass(lblAID.Text, lblName.Text, lblType.Text, "User Module", this); 

jetzt können Sie nur die Zeile entfernen:

frmUser us = new frmUser(lblEID.Text, lblAdmin.Text, lblType.Text); 

und das Ganze funktioniert und verstecken richtig.

Verwandte Themen