Marc-IT Ответов: 2

Исключите некоторые текстовые файлы из foreach C#


Привет,

У меня есть код ниже, чтобы проверить наличие пустых текстовых полей и вернуть сообщение, если оно пусто.
Но некоторые из них не являются обязательными.
Как я могу исключить из проверки только 2 текстовых поля? некоторые из них находятся в групповых ящиках.

Спасибо за помощь

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

foreach (var textBox in Controls.OfType<GroupBox>().SelectMany(groupBox => groupBox.Controls.OfType<TextBox>()))

{
    if (textBox is TextBox && textBox.Visible && string.IsNullOrEmpty(textBox.Text))
    {
        MessageBox.Show($"A value is missing!", "Warning!");
        textBox.Focus();
        return;
    }
}

[no name]

По имени или свойству тега было бы несколько способов.

Marc-IT

Спасибо,
Не могли бы вы привести пример.

[no name]

Пример чего? И почему вам нужно, чтобы кто-то написал для вас код, который проверяет свойство элемента управления? Разве это не похоже на Программирование 101? Кто написал для вас существующий код?

Marc-IT

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

CPallini

Смотрите, например
http://stackoverflow.com/questions/19775851/ability-to-find-winform-control-via-the-tag-property

2 Ответов

Рейтинг:
4

Mohtshm Zubair

Предположим, что имя этих двух текстовых полей-txtbox3 и txtbox4
Это можно сделать в двух местах сначала поставить там, где предикат после SelectMany.

Текущий код

foreach (var textBox in Controls.OfType<GroupBox>().SelectMany(groupBox => groupBox.Controls.OfType<TextBox>()))



это должно быть


var idsToExclude = new []{"txtbox3", " txtbox4"};
foreach (var textBox in Controls.OfType<GroupBox>().SelectMany(groupBox => groupBox.Controls.OfType<textbox>()).Where(t=> !idsToExclude.Contains(t.Name) ))</textbox>


Также вы можете использовать эту логику в состоянии if


Рейтинг:
1

Dave Kreskowiak

Если я правильно понимаю вашу проблему,я бы не стал помещать этот код в форму.

Я бы создал новый элемент управления TextBox, который реализует код проверки и параметр, сообщающий ему, должен ли он вообще запускаться. Все, что вам нужно сделать, это создать класс, который наследуется от TextBox. Используйте новое текстовое поле вместо текстовых полей, которые вы хотите проверить в своей форме. Каждый из них может проверить свое собственное значение и вернуть значение true/false, если оно проходит проверку.

Вы могли бы начать с чего-то простого, как это:

public class ValidatingTextBox : TextBox
{
    public bool ShouldValidate { get; set; }

    public bool IsValueOk()
    {
        // Set out default return value. In this case, if we don't care
        // if validation runs or not, the default should be true.
        bool returnValue = true;

        if (ShouldValidate)
        {
            // your rules for validating the content go here.
            if (!string.IsNullOrWhitespace(Text))
            {
                // some other rules to validate the value.

                // if one of the rules fails, set the return value to false.
                returnValue = false;
            }
        }

        return returnValue;
    }
}

Теперь вам не нужно отфильтровывать данные на основе значения тега. Вы можете просто сказать каждому ValidatingTextBox, должен ли он проверять себя или нет, просто установив его свойство ShouldValidate в true.