微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决文本框未在可视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());
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。