【问题标题】:C# validating data in multiple text boxes?C#验证多个文本框中的数据?
【发布时间】:2009-08-23 09:33:42
【问题描述】:

我有一个带有多个文本框的 C# 表单。在继续之前,我需要验证每个文本框中的输入。如果我对每个文本框的验证规则相同,我是否有任何方法可以一次对所有字段应用相同的规则。我想要的输出是一样的。 (我想将相关文本框的背景颜色更改为粉红色)我的意思是我不想使用类似的东西

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

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

【问题讨论】:

    标签: c# .net validation textbox


    【解决方案1】:

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

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

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

    【讨论】:

    • 来吧 Henri,你能多花点时间写一个比这更好的例子吗?
    【解决方案2】:

    也许是 foreach 循环? :)

    【讨论】:

    • 要使用 foreach,我需要将所有文本框放入某个数据结构中,对吗?
    【解决方案3】:

    编写您自己的控件,该控件在设计时接受正则表达式字符串进行验证检查。在执行时使用一个通用处理程序处理 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);
    
            }
        }
    

    【讨论】:

      【解决方案4】:

      我想你可以试试这个。将你想要验证的所有控件放在一个 grouper 控件中,并使用 foreach 循环对 grouper 内的所有控件调用 validate

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-23
        • 2012-02-03
        • 1970-01-01
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多