0

我使用VS2010,我有一个文本框......我在盒子上分配了一个KeyPress,abd设置方法如下:

private void MyButton_KeyPress(object sender, KeyPressEventArgs e)
    {
        e.Handled = true;
    }

我注意到我不再能够在文本框中输入任何特殊键,例如减号 (-) 和加号 (+)。有人可以向我解释为什么我不再能够做到这一点,以及我能做些什么来解决这个问题?

最终我试图只允许输入数字键,我也想允许(-)减号,但如果我不能在那里得到减号,那么我想我将无法限制文本盒子

4

4 回答 4

3

这应该为您完成工作。

private void MyButton_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar >= '0' && e.KeyChar <= '9') return;
    if (e.KeyChar == '+' || e.KeyChar == '-') return;
    e.Handled = true;
}

下面是它的工作原理。如果键入的字符是您想要的字符,只需从函数返回并让普通处理程序处理它。所有其他字符都被标记为已处理,因此对它们的处理将停止。由于没有对它们进行任何处理,因此它们基本上被丢弃了。您可以将所有内容放在一个 if 语句中,但为了清楚起见,我将其保留为这种方式

于 2012-10-20T03:43:47.797 回答
2

我稍微更改了您的代码并添加了仅接受 1、2 或 + 的逻辑,这是您的问题字符之一。希望这对你有帮助!

 private void MyButton_KeyPress(object sender, KeyPressEventArgs e)
    {
        e.Handled = true;
        if (e.KeyChar == '1' || e.KeyChar == '2' || e.KeyChar == '+') textBox1.AppendText(e.KeyChar.ToString());
    }
于 2012-10-20T03:22:06.083 回答
1

实际上,您应该这样做:

    private void MyButton_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == '1' || e.KeyChar == '2' || e.KeyChar == '+')
             e.Handled = false;
        else
             e.Handled = true;
    }

当然,您需要用返回是否允许密钥的方法来替换单个测试。

干杯

于 2012-10-20T03:37:17.390 回答
1

就像现在一样,您的代码不允许输入任何内容。e.Handled 语句取消击键。下面的代码将允许任何数字字符和减号。如果您只想将减号放在文本框中的第一个位置,则必须在允许该字符之前测试 TextLength 属性。

private void MyButton_KeyPress(object sender, KeyPressEventArgs e
{
    int i = 0;
    if (!int.TryParse(e.KeyChar.ToString(), out i))
    {
        if (e.KeyChar.CompareTo('-')!=0)
        {
            e.Handled = true;
        }
    }
}
于 2012-10-20T03:46:57.077 回答