我有文本框,当我创建该表单时,我传递了一些值,然后我阻止用户根据传递的值使用此代码将一些内容输入到文本框中:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!brojevi && char.IsDigit(e.KeyChar))
{
e.Handled = true;
return;
}
if (!slova && char.IsLetter(e.KeyChar))
{
e.Handled = true;
return;
}
if (!znakovi && char.IsPunctuation(e.KeyChar) || !znakovi && char.IsSymbol(e.KeyChar))
{
e.Handled = true;
return;
}
if (!razmak && char.IsSeparator(e.KeyChar))
{
e.Handled = true;
return;
}
if (maxKaraktera != -1 && (textBox1.Text.Length + 1) > maxKaraktera)
{
e.Handled = true;
return;
}
if (String.IsNullOrWhiteSpace(textBox1.Text))
{
return;
}
if (maxBroj != -1 && Convert.ToDouble(textBox1.Text) > maxBroj)
{
e.Handled = true;
return;
}
}
问题是我启用了brojevi
并将maxBroj
设置为10
现在,当我尝试输入一些字符时,它会检查slova
不是true
,设置e.Handled = true
和return
,而在我的文本框中字符不是估算的没关系。
但是当我尝试插入大于10的数字(比方说12)时,它会转到if
语句,检查if(maxBroj != -1 && Convert.ToDoube(textBox1.Text) > maxBroj)
并输入它,设置e.Handled = true
和{ {1}}但是号码是在文本框中实现的。
为什么会这样?
编辑:创建包含return
创建自:
textbox
以下是MessageBoxWithValue msg = new MessageBoxWithValue("Unesite kolicinu", "Unesite zeljenu kolicinu. Maksimum: " + aa.maxKolicina.ToString());
msg.brojevi = true;
msg.maxBroj = aa.maxKolicina;
msg.ShowDialog();
if(msg.DialogResult == DialogResult.OK)
{
kol = Convert.ToDouble(msg.returnValue);
}
else
{
return;
}
表格:
MessageBoxWithValue
答案 0 :(得分:1)
但是当我尝试插入大于10的数字时(让我们说12),它会转到if语句,它检查
if(maxBroj != -1 && Convert.ToDoube(textBox1.Text) > maxBroj)
并输入它,设置e.Handled = true
并返回但号码是在文本框中实现的。
我希望我的问题正确无误。您正尝试按其值过滤数字(例如maxBroj
设置为10)并且您期望
if (maxBroj != -1 && Convert.ToDouble(textBox1.Text) > maxBroj)
{
e.Handled = true;
return;
}
不允许输入数字>10
。不幸的是,这不会按预期工作,因为textBox1.Text
在KeyPress
事件处理程序完成之前不会被设置。
我们假设你正在进入14
。当第一个KeyPress
事件被引发(1
)时,textBox1.Text
为空。你是从
if (String.IsNullOrWhiteSpace(textBox1.Text))
{
return;
}
之后textBox1.Text
设置为"1"
。然后引发第二个KeyPress
事件。 textBox1.Text
为"1"
,因此该方法无法进入块
if (maxBroj != -1 && Convert.ToDouble(textBox1.Text) > maxBroj)
{
e.Handled = true;
return;
}
之后textBox1.Text
将设置为"14"
,但这对您的验证来说太迟了。
您必须计算预期的新值。有关如何在现有字符串中插入新字符,请参阅this question。