我有一个带有多个文本框的C#表单。在继续之前,我需要验证每个文本框中的输入。如果每个文本框的验证规则相同,我是否可以同时对所有字段应用相同的规则。我想要的输出是一样的。 (我想把相关文本框的背面颜色变成粉红色)我的意思是我不想使用像
这样的东西validate_txtName();
validate_txtAddress();
validate_txtCity();
应该有一些标准和简单的方法来做到这一点。我正在寻求这种方式;)
答案 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循环调用石斑鱼内部所有控件上的验证