C # проверка данных в нескольких текстовых полях? - PullRequest
0 голосов
/ 23 августа 2009

У меня есть форма C # с несколькими текстовыми полями. Прежде чем продолжить, мне нужно проверить входные данные в каждом текстовом поле. Если мое правило проверки для каждого текстового поля одинаково, могу ли я применить одно и то же правило ко всем полям одновременно? И мой желаемый результат такой же. (Я хочу изменить цвет фона соответствующего текстового поля на розовый) Я имею в виду, что я не хочу использовать что-либо вроде

validate_txtName();
validate_txtAddress();
validate_txtCity();

Должен быть какой-то стандартный и простой способ сделать это .. Я ищу этот путь;)

Ответы [ 4 ]

1 голос
/ 23 августа 2009

Напишите свой собственный элемент управления, который принимает строку регулярного выражения для проверки правильности во время разработки. Во время выполнения обрабатывайте событие Validating с помощью одного общего обработчика. Следующий код делает это. Вы можете удалить провайдера ошибок и просто использовать логику backcolor.

public class ValidatedTextBox : TextBox
    {
        private IContainer components;
        private Color m_OldBackColor;        

        [Description("Color to be set when validation fails.")]
        public Color BackColorOnFailedValidation
        {
            get
            {
                return m_BackColorOnFailedValidation;
            }

            set
            {
                m_BackColorOnFailedValidation = value;
            }
        }
        private Color m_BackColorOnFailedValidation = Color.Yellow;

        [Description("Message displayed by the error provider.")]
        public string ErrorMessage
        {
            get
            {
                return m_ErrorMessage;
            }

            set
            {
                m_ErrorMessage = value;
            }
        }
        private string m_ErrorMessage = "";


        [Description("Regular expression string to validate the text.")]
        public string RegularExpressionString
        {
            get
            {
                return m_RegularExpressionString;
            }
            set
            {              
                m_RegularExpressionString = value;
            }
        }
        private string m_RegularExpressionString = "";
        private ErrorProvider errorProvider1;

        [Browsable(false)]
        public bool Valid
        {
            get
            {
                return m_Valid;
            }
        }
        private bool m_Valid = true;

        public ValidatedTextBox()
            : base()
        {
            InitializeComponent();
            m_OldBackColor = this.BackColor;
            this.Validating += new System.ComponentModel.CancelEventHandler(ValidatedTextBox_Validating);
            errorProvider1.Clear();
        }

        void ValidatedTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (RegularExpressionString != string.Empty)
            {
                Regex regex = new Regex(RegularExpressionString);
                m_Valid = regex.IsMatch(Text);
                SetBackColor();
                if (!Valid)
                {
                    errorProvider1.SetError(this, this.ErrorMessage);
                    this.Focus();
                }
                else
                {
                    errorProvider1.Clear();
                }
            }
        }

        private void SetBackColor()
        {
            if (!Valid)
                BackColor = BackColorOnFailedValidation;
            else
                BackColor = m_OldBackColor;
        }

        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.errorProvider1 = new System.Windows.Forms.ErrorProvider(this.components);
            ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).BeginInit();
            this.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).EndInit();
            this.ResumeLayout(false);

        }
    }
1 голос
/ 23 августа 2009

Сначала поместите все текстовые поля в список. Затем примените к списку функцию ForEach, передав в качестве аргумента лямбда-выражение, представляющее ваше правило проверки.

Edit: Я нашел этот пример в своем собственном коде:

Core.Model.Settings.Labels.ToList()
.ForEach(x => schedulerStorage1.Appointments.Labels.Add(Color.FromArgb(x.ARGB), x.LabelName));
1 голос
/ 23 августа 2009

может цикл foreach? :)

0 голосов
/ 23 августа 2009

вы можете попробовать это, я полагаю .. Поместите все элементы управления, которые вы хотите проверить, в элемент управления группировщика и вызовите команду validate на всех элементах управления внутри группы, используя цикл foreach

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