Member 13363321 Ответов: 2

Проблема проверки в приложении windows form


у меня есть 10 текстовых полей, я хочу проверить, вставляет ли пользователь текст в 8-е текстовое поле, оно должно генерировать ошибку, потому что он должен сначала заполнить 7-е текстовое поле и так далее, это можно сделать с помощью if else, но мне нужно сделать это с помощью циклов для уменьшения кода в C#(windows form).
не могли бы вы мне помочь, пожалуйста.

Что я уже пробовал:

я написал несколько условий if

Patrice T

И вы планируете показать свой код ?

2 Ответов

Рейтинг:
2

OriginalGriff

Цитата:
мне нужно сделать это с помощью циклов для сокращения кода

Нет, это не так. Вы не проверяете "использование циклов" в WinForms, вы реагируете на события и обрабатываете вещи.

То, что вы делаете, - это обрабатываете события, такие как mobileNumber.TextChanged и в этом обработчике вы проверяете, есть ли номер стационарного телефона.Текст содержит данные. Если это не так, покажите пользователю, что есть проблема, и, возможно, установите фокус на текстовое поле, которое он должен заполнить.

Но... в отличие от консольных приложений, ваш код не должен "заставлять" пользователя вводить какие-либо данные или принимать какие-либо решения в определенном порядке, если только эти данные или эти варианты выбора не означают, что тип данных, которые вам нужны, отличается. А затем вы разделяете его так, чтобы "общие" данные и "выбор" были видны вместе, а затем, когда он нажимает "ОК", для его ввода появляется другой набор данных, основанный на этом выборе.

Например, если это была система бронирования авиабилетов, то на первой странице есть имя, адрес, номер мобильного телефона и селектор "аэропорт для вылета". Он выбирает аэропорт и нажимает OK, так что появляется новая страница с пунктами назначения, доступными из этого аэропорта.

Идея заключается не в том, чтобы заставить пользователя, а в том, чтобы направлять его в принятии решений и предоставлении только правильной информации. Это лучше, проще и быстрее для пользователя, а также намного менее запутанно. Попробуй! Речь идет не о "сокращении кода" - код дешев, - а об улучшении пользовательского опыта.


Рейтинг:
0

Maciej Los

Вы должны использовать Класс ErrorProvider (System.Окна.Формы) | Microsoft Docs[^] чтобы иметь возможность проверить, действительна ли форма.
Видеть: Как отобразить значки ошибок для проверки формы с помощью компонента Windows Forms ErrorProvider | Microsoft Docs[^]

Я бы предложил создать Dictionary<ErrorProvider> например, для каждого текстового поля:

Dictionary<Control, ErrorProvider> eps = new Dictionary<Control, ErrorProvider>();
eps.Add(textBox1, new ErrorProvider(this));
eps.Add(textBox2, new ErrorProvider(this));
//and so on...


Затем вы должны определить правило проверки для каждого текстового поля
private void txtBox1_Validating(object sender, CancelEventArgs e)
{
    if (checking_for_error_logic_here)
        eps[txtBox1].SetError(txtBox1, "Custom error message here");
    else
        eps[txtBox1].Clear();
}


Наконец, вы должны создать такой метод:
private bool IsFormValid()
{
    foreach (Control c in eps.Keys)
    {
        if(epc[c].GetError(c) !="")
            return false;
    }
    return true;
}

чтобы проверить, действительна ли форма.

Удачи вам!


Member 13363321

на самом деле я хочу проверить текстовые поля, когда последовательность отсутствует
как будто у меня есть 10 текстовых полей,я ввожу 1,3 текстовых поля, но проверка должна срабатывать только для 2-го текстового поля

Maciej Los

Итак, измените код в соответствии с вашими потребностями. Вы можете добавить столько валидаторов, сколько пожелаете. Это зависит от вас и требований приложения.