Как я могу запустить событие, чтобы моя другая форма реагировала на него? - PullRequest
2 голосов
/ 15 июля 2010

У меня есть эта форма под названием MainForm.cs. Когда я нажимаю кнопку «Ввод программы», я отображаю другую форму, используя метод .ShowDialog ().

В этой новой форме, называемой LoginBox.cs, я проверяю, верны ли введенные учетные данные, и, если они есть, я хочу, чтобы мой MainForm.cs реагировал либо с положительным ответом (открывается фактическая форма программного обеспечения), либо с отрицательным ответом с предупреждением MessageBox. его провал.

Это очень простой вариант использования, но я не знаю, как решить это правильно и эффективно. Спасибо.

private void button1_Click(object sender, EventArgs e)
        {
            LoginBox login = new LoginBox();
            login.ShowDialog();
        }

//And in the LoginBox.cs file:
private void button1_Click(object sender, EventArgs e)
        {
            if ((txtUser.Text == "admin") && (txtPassword.Text == "123"))
            {

            }
        }

Ответы [ 3 ]

1 голос
/ 15 июля 2010

Если вы откроете форму с помощью ShowDialog, она возвращает DialogResult, которую вы можете проверить в основной форме.

LoginBox login = new LoginBox();
DialogResult dialogResult = login.ShowDialog();
if (dialogResult == DialogResult.OK)
{
     // etc...
}

Вы можете установить значение DialogResult в форме LoginBox:

DialogResult = DialogResult.OK;
1 голос
/ 15 июля 2010

Другие упомянули использование DialogResult, которое может работать - но в этом случае использования может быть немного злоупотреблено. Его предназначение состоит в том, чтобы сообщить родительской форме, что пользователь сделал с дочерней формой - они нажимали OK или Cancel? Они нажали Retry или Abort? Не интуитивно понятно, что его следует использовать для аутентификации.

Итак, что лучше? Вероятно, комбинация ...

Ваш LoginBox класс является диалоговым окном, поэтому следует ожидать возврата DialogResult, но его также следует использовать только для указания того, что пользователь сделал на Form, а не результата аутентификации.

Я бы предложил рассмотреть использование некоторых других диалогов, таких как OpenFileDialog. Он возвращает DialogResult , чтобы указать, следует ли продолжать открывать файл , но он на самом деле не открывает файл, пока ему явно не сказано сделать это. Это означает, что потребляющий код должен как проверять результат, так и инструктировать диалоговое окно, чтобы он выполнял свою функцию, так что это не совсем просто - но это довольно условно.

Вот пример того, как я бы предложил вам использовать LoginBox:

private void button1_Click(object sender, EventArgs e)
{
    LoginBox login = new LoginBox();
    if (login.ShowDialog() == DialogResult.OK) // Let the user input their credentials and click OK or Cancel
    {
        if (!login.ValidateCredentials) // Perform the authentication with the collected credentials
        {
            MessageBox.Show("The specified Credentials were invalid!");
        }
    }
}
0 голосов
/ 15 июля 2010

Добавить событие в LoginBox. Затем пусть MainForm обработает это событие. В обработчике событий перейдите к дополнительной логике, которую вы хотите выполнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...