问题描述
我正在尝试将文本框的当前整数值立即放入一个整数,但是使用以下代码,看来我总是落后1步:
private void txtMemoryLocation_KeyPress(object sender,KeyPressEventArgs e)
{
// Only allow nummeric value
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
if (txtMemoryLocation.Text != "")
{
nLocation = int.Parse(txtMemoryLocation.Text.Trim());
}
}
我总是在文本框中以数字1开头,当我将“ 1”更改为“ 10”时,我的nLocation更改为1, 当我输入“ 100”时,nLocation变为10
怎么回事?
解决方法
改为挂接TextChanged事件并在那里进行解析。当KeyDown,KeyPress和KeyUp触发时,文本框仍然没有机会接受新字符。
或者,您可以包括新按下的键来修改现有功能,如下所示:
private void txtMemoryLocation_KeyPress(object sender,KeyPressEventArgs e)
{
// Only allow nummeric value
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
if (txtMemoryLocation.Text != "")
{
nLocation = int.Parse(txtMemoryLocation.Text.Trim() + e.KeyChar);
}
}
,
将在添加新的按下的字符 TextBox.Text 之前调用KeyPress和KeyDown事件,如果 e.handle 为false,则新的字符将添加到 TextBox。文本和 TextBox.TextChanged 将被调用。
您可以像我一样
注意:首先将TextChanged方法添加到txtMemoryLocation.TextChanged
private void txtMemoryLocation_KeyPress(object sender,KeyPressEventArgs e)
{
e.Handled = (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar));
}
private void TextChanged(object sender,EventArgs e)
{
nLocation = int.Parse(txtMemoryLocation.Text.Trim());
}