文本框未在可视C#中返回当前值

问题描述

我正在尝试将文本框的当前整数值立即放入一个整数,但是使用以下代码,看来我总是落后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());
}