Ich habe zwei Formulare: Formular1: Übergeordnet: Anmeldebildschirm Form2: Untergeordnet: Anwendung

Wenn die Anwendung gestartet wird, wird Form1 angezeigt. Der Benutzer gibt ein Kennwort ein. Wenn dieses Kennwort mit einer Konstanten übereinstimmt, wird Form1 ausgeblendet und Form2 wird angezeigt. Wenn ich jetzt Form2 mit der Schaltfläche "Abmelden" schließe, sende ich eine "Nachricht" an Form1, damit sie wieder angezeigt werden kann. Denken Sie dies als Messenger-Anwendung. Wenn Sie sich abmelden, werden Sie zum Anmeldebildschirm zurückgeschickt.

Ich suche zwei Tage, kann aber nichts finden, was für mich funktioniert hat. Entschuldigung, wenn diese Frage ein Duplikat ist.

0
Ferit Yiğit BALABAN 19 Jän. 2019 im 21:46

3 Antworten

Beste Antwort

Ich schlage vor, dass Sie das Haupt- / Antragsformular als übergeordnetes Element verwenden und das Anmeldeformular als untergeordnetes Formular anzeigen. Zeigen Sie das Anmeldeformular mit ShowDialog () im "Angezeigten" Ereignis des Haupt- / Elternformulars an (zum Beispiel). Abhängig davon, wie intelligent Ihre Formularklassen sind, müssen Sie möglicherweise den folgenden Code ändern. Das folgende Codebeispiel impliziert, dass das Anmeldeformular die gesamte Anmeldelogik ausführt. Es signalisiert dann seinem übergeordneten Element, ob die Anmeldung mit der DialogResult-Eigenschaft beim Schließen erfolgreich war oder nicht.

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    private void ButtonLogoutClick(object sender, EventArgs e)
    {
        LoginUser();
    }

    private void MainFormShown(object sender, EventArgs e)
    {
        LoginUser();
    }

    private void LoginUser()
    {
        using (var loginForm = new LoginForm())
        {
            var loginResult = loginForm.ShowDialog();
            if (loginResult == DialogResult.OK)
            {
                //Login Success
                var userId = loginForm.User.ID; //Query user ID from Login Form for example
            }
            else
            {
                //Login Failed
                Close(); //Close Program for example
            }
        }
    }
}
0
PhilipWalker 22 Jän. 2019 im 13:27

In Form1 können Sie das FormClosed -Ereignis des zweiten Formulars abonnieren, bevor Sie es öffnen:

var form2 = new Form2();
form2.FormClosed += Form2_FormClosed;
form2.Show();

Dann können Sie im Ereignishandler in Form1 alles Nützliche tun:

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
    MessageBox.Show("Form 2 closed");
}
0
Olivier Jacot-Descombes 20 Jän. 2019 im 18:31

Form 1:

Statische und öffentliche Variable erstellen

static public string message = "Message from Form1";

Form2

Verwenden Sie diese Variable

MessageBox.Show(Form1.Message, " Message");
0
Ivan 21 Jän. 2019 im 06:07