5 回答
TA贡献1856条经验 获得超17个赞
您可以为离开事件定义一个方法,并将该方法设置为属性窗口中每个文本框的离开事件:
private void TextBoxGroup_Leave(object sender, TextBox e)
{
if (Convert.ToInt32(e.Text) < 1 || Convert.ToInt32(e.Text) > 100)
{
MessageBox.Show("Please enter a number from 1 - 100");
e.Text = string.Empty;
}
}
TA贡献1784条经验 获得超8个赞
下面是使用文本框的离开事件的示例。此外,文本框按键事件用于仅允许数字。将每个文本框Leave和KeyPress事件连接到下面的文本框和事件,它应该按照您所描述的方式工作。正如其他人提到的,有很多方法可以做到这一点。
private void tb_Course_Leave(object sender, EventArgs e) {
TextBox tb = sender as TextBox;
if (tb.Text == "")
return;
if (int.TryParse(tb.Text, out int value)) {
if (value >= 0 && value <= 100) {
return;
}
}
MessageBox.Show("Please enter a VALID number from 1 - 100");
tb.Text = "";
}
private void tb_Course_KeyPress(object sender, KeyPressEventArgs e) {
e.Handled = !char.IsDigit(e.KeyChar);
}
TA贡献1806条经验 获得超8个赞
您可以循环遍历 GroupBox 中的每个控件,并检查哪些是文本框:
ForEach (Control tb in gb.Controls) //gb is a reference your GroupBox object
{
if tb is TextBox
{
int i;
if (int.TryParse(tb.Text, out i))
{
if (i >= 0 && i <= 100)
return;
}
}
MessageBox.Show("Please enter a number from 1 - 100");
}
在缺乏关于您正在做什么的更多背景的情况下,很难优化您的验证过程,但这回答了您的问题。
TA贡献1877条经验 获得超1个赞
如果您想验证多个组框中文本框的输入,您可以尝试此操作。
private void ValidateInputOfControls(Control.ControlCollection[] controlsArray)
{
foreach (Control.ControlCollection controlCollection in controlsArray)
{
foreach (Control control in controlCollection)
{
if (control is TextBox)
{
int result;
if (int.TryParse(control.Text, out result))
{
if (!(result >= 0 && result <= 100))
{
MessageBox.Show("Please enter a number from 1 - 100 in field " + control.Name);
}
}
else
{
MessageBox.Show("Please enter a number from 1 - 100 in field " + control.Name);
}
}
}
}
}
您需要做的就是将组框的控件添加到 Control.ControlCollection 数组中,然后调用该方法。请参阅下面的示例。
Control.ControlCollection[] controls = { groupBox1.Controls, groupBox2.Controls };
ValidateInputOfControls(controls);
TA贡献1874条经验 获得超12个赞
对于复杂的形式MessageBox.Show
可能会变得相当烦人:
它不会将用户指向错误的字段
它一一显示错误,您可能还有更多不正确的输入
还建议的方法“允许”用户通过单击“添加”按钮来失败。
我建议使用ErrorProvider将用户指向失败的输入,并在模型(在您的情况下 - 所有输入)无效时禁用按钮。您甚至可以限制用户在提供错误输入时不要留下字段:)
您可以阅读Windows 窗体中的用户输入验证指南,它概述了 WindowsForms 中的验证工具。
public partial class Form1 : Form
{
private HashSet<TextBox> validatedInputs = new HashSet<TextBox>();
private int inputsCount;
public Form1()
{
InitializeComponent();
button1.Enabled = false;
foreach (var tb in groupBox1.Controls.OfType<TextBox>())
{
tb.Validating += allTextBoxs_ValidatingAndEditing;
tb.TextChanged += allTextBoxs_ValidatingAndEditing;
inputsCount++;
}
}
private void allTextBoxs_ValidatingAndEditing(object sender, EventArgs e)
{
if (sender is TextBox tb)
{
if (!int.TryParse(tb.Text, out int value) || value < 0 || value > 100)
{
if (e is CancelEventArgs ce)
ce.Cancel = true;
errorProvider1.SetError(tb, "Value must be in range [0..100]");
validatedInputs.Remove(tb);
}
else
{
errorProvider1.SetError(tb, null);
validatedInputs.Add(tb);
}
setAddButtonEnabled();
}
}
private void setAddButtonEnabled() => button1.Enabled = validatedInputs.Count == inputsCount;
}
请注意,此实现的限制非常严格,用户甚至无法关闭表单,直到输入正确的值:)
- 5 回答
- 0 关注
- 172 浏览
添加回答
举报