C#验证多个文本框中的数据?

时间:2009-08-23 09:33:43

标签: c# .net validation textbox

我有一个带有多个文本框的C#表单。在继续之前,我需要验证每个文本框中的输入。如果每个文本框的验证规则相同,我是否可以同时对所有字段应用相同的规则。我想要的输出是一样的。 (我想把相关文本框的背面颜色变成粉红色)我的意思是我不想使用像

这样的东西
validate_txtName();
validate_txtAddress();
validate_txtCity();

应该有一些标准和简单的方法来做到这一点。我正在寻求这种方式;)

4 个答案:

答案 0 :(得分:1)

也许是foreach循环? :)

答案 1 :(得分:1)

首先,将所有文本框放在列表中。然后在列表中应用ForEach函数,将作为参数的lambda表达式作为参数传递,表示您是验证规则。

编辑: 我在自己的代码中找到了这个例子:

Core.Model.Settings.Labels.ToList()
.ForEach(x => schedulerStorage1.Appointments.Labels.Add(Color.FromArgb(x.ARGB), x.LabelName));

答案 2 :(得分:1)

编写您自己的控件,该控件在设计时接受正则表达式字符串以进行验证检查。在执行时使用一个公共处理程序处理Validating事件。以下代码执行此操作。您可以删除errorprovider并使用背景色逻辑。

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);

        }
    }

答案 3 :(得分:0)

你可以尝试这个我想..把你想要验证的所有控件放在一个石斑鱼控件中,并使用foreach循环调用石斑鱼内部所有控件上的验证