【发布时间】:2018-01-15 13:58:09
【问题描述】:
我有文本框,当我创建该表单时,我传递了一些值,然后我阻止用户使用此代码根据传递的值将一些内容输入到文本框中:
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 和 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 表单:
public partial class MessageBoxWithValue : Form
{
public bool brojevi = false;
public bool slova = false;
public bool znakovi = false;
public bool razmak = false;
public double maxBroj = -1;
public int maxKaraktera = -1;
public string returnValue;
public MessageBoxWithValue(string naslov, string opis)
{
InitializeComponent();
this.Text = naslov;
label1.Text = opis;
}
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;
}
}
private void button2_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return)
{
Uspesno();
}
}
private void button1_Click(object sender, EventArgs e)
{
Uspesno();
}
private void Uspesno()
{
this.DialogResult = DialogResult.OK;
returnValue = textBox1.Text;
}
}
【问题讨论】:
-
简短的回答是你的逻辑显然遗漏了一些东西。但是,这不是一个最小的可行代码。很难知道是什么影响了这些变量中的大多数,因此很难准确地了解发生了什么
-
使用调试器,单步执行语句并检查每一步发生的情况。我怀疑可能 textBox1.Text 包含旧值,直到处理程序退出。
-
在匈牙利语中使用变量名称并没有真正的帮助(嗯,很可能它确实对您有所帮助,但很难猜出您正在尝试以这种方式实现什么) -你能把它们翻译成有意义的英文变量名吗?如果您很难将它们翻译成有意义的名称,那么您可能缺乏概念。
-
我添加了整个代码。如果您需要,我可以将变量翻译成英文。