Проверка перед вызовом ShowDialog - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю с двумя формами, где мне нужно проверить входные данные в первой форме, прежде чем я смогу переключиться на вторую форму.

Мой код в первой форме выглядит следующим образом:

private void btnSignIn_Click(object sender, EventArgs e)
    {
        GetInputs();
        IsValidata();
        de.Text = string.Format("Hello! {0} {1} {2}{3} {4} {5})",
          Fname, Lname, "(U", Unum1, "-", Unum2);
        this.Hide();
        de.ShowDialog();
    }

IsValidata () представляет собой серию проверок, в которых он проверяет наличие входных данных и является ли это строкой.

Я попытался поместить их в фигурные скобки, однако проверка не будет работать:

  de.Text = string.Format("Hello! {0} {1} {2}{3} {4} {5})",
          Fname, Lname, "(U", Unum1, "-", Unum2);
        this.Hide();
        de.ShowDialog();

Единственный способ загрузить форму2 - это вынуть фигурные скобки, но логика неверна и она не совсем проверяет мои входные данные.Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вам не хватает некоторой логики потока управления в обработчике событий.

Предположим, что вы хотите просто показать пользователю окно сообщения, если ввод неверен.В противном случае, если ввод действителен, отобразите вторую форму.

private void btnSignIn_Click(object sender, EventArgs e)
{
    GetInputs();
    if (IsValidata())
    {
        de.Text = string.Format("Hello! {0} {1} {2}{3} {4} {5})",
            Fname, Lname, "(U", Unum1, "-", Unum2);
        this.Hide();
        de.ShowDialog();
    }
    else
    { 
        // Show a message box, with an OK button only
        MessageBox.Show("Invalid Input", "Invalid Input", MessageBoxButtons.OK);
    }
}

В приведенном выше примере мы:

  • Получим ввод
  • Проверьте, еслиданные действительны
  • Если данные являются действительными, показать новую форму
  • Если данные не являются действительными, мы отображаем сообщение дляuser

Если вы хотите отобразить сообщение на основе результатов проверки (т. е. если пользователь вводит только цифры вместо строки), вам необходимо добавитьэтой логики и создайте сообщение, которое вы хотите отобразить.

Обновление:

Хорошо, так что вы действительно хотите, чтобы подпрограмма проверки возвращала тип проверки, которая не удалась (если произошел сбой).

Итак, давайте определим новый тип, который метод проверки может вернуть:

public class ValidationResult 
{
    public bool IsValid { get; set; }
    public string UserMessage { get; set; }
}

Теперь мы можем обновить метод проверки:

private ValidationResult IsValidata()
{
    //validate the First Name textbox
    if (!IsPresent(txtFirst, "First Name"))
    {
        return new ValidationResult { 
            IsValid = false, 
            UserMessage = "Please enter a First Name"
        };
    }

    // rest of valiation rules here,
    // setting the UserMessage as appropriate

    // If no validation checks fail, then we are valid
    return new ValidationResult { IsValid = true };
}

Теперь ваш обработчик событий может использовать результаты:

private void btnSignIn_Click(object sender, EventArgs e)
{
    GetInputs();
    var validationResult = IsValidata();
    if (validationResult.IsValid)
    {
        de.Text = string.Format("Hello! {0} {1} {2}{3} {4} {5})",
            Fname, Lname, "(U", Unum1, "-", Unum2);
        this.Hide();
        de.ShowDialog();
    }
    else
    { 
        // Show a message box, with an OK button only
        MessageBox.Show(validationResult.UserMessage, "Invalid Input", MessageBoxButtons.OK);
    }
}
0 голосов
/ 25 сентября 2018

Это код для моих действительных данных:

private bool IsValidata()
{

            //validate the First Name textbox
            if (!IsPresent(txtFirst, "First Name"))
            {
                return false;
            }
            if (!StringValidator(Fname))
            {
                return false;
            }           

            //validate the Last Name textbox
            if (!IsPresent(txtLast, "Last Name"))
            {
                return false;
            }
            if (!StringValidator(Lname))
            {
                return false;
            }

            return true;
}
...