如何在“。”时捕获system.windows.forms.keys。键是按下的

时间:2011-03-01 21:31:26

标签: c# .net

谢谢汉斯!这是下面的技巧

this.KeyPress += new KeyPressEventHandler(TabbedTextBox_KeyPress); 
    void TabbedTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == '.')
       {
           e.Handled = true;
           var nextControl = this.Parent.GetNextControl(this, forward: true);
           nextControl.Focus();
       }      
    }

好的,这里有更多细节。

这可行,但“。”显示在文本框控件中(不需要)

    this.KeyDown += new KeyEventHandler(TabbedTextBox_KeyDown);
    }
    void TabbedTextBox_KeyDown(object sender, KeyEventArgs e)
    {
        //MessageBox.Show("Event: " + e.KeyCode.ToString());
        if (e.KeyCode == Keys.Decimal || e.KeyCode == Keys.OemPeriod)
        {               
            var nextControl = this.Parent.GetNextControl(this, forward: true);
            nextControl.Focus();
        }
    }

当我使用这个事件处理程序时,我无法绑定到e.keycode,因为它在上下文中不存在

this.KeyPress += new KeyPressEventHandler(TabbedTextBox_KeyPress);
        void TabbedTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {

        //MessageBox.Show("KeyPress Event: " + e.KeyChar.ToString());
        if (e.KeyChar == (char)Keys.Decimal || e.KeyChar == (char)Keys.OemPeriod)
       {
            MessageBox.Show("KeyPress Captured: " + e.KeyChar.ToString());
       }      
    }

我试图抓住“。”按下键,因为我创建了一个具有IP地址的表单,我想在“。”时自动选项卡。键是按下的。当我按下“。”时,第一个消息框显示此消息。无论是在小键盘上还是在ALT键上方,但从未进入我已经尝试过的if语句

if (e.KeyChar == (char)Keys.Decimal)

if (e.KeyChar == (char)Keys.OemPeriod)

消息框显示了这一点 KeyPress活动:。

我似乎无法弄清楚什么是道具代码.... 我一直试图从msdn Keys Enumeration

中弄明白
    void TabbedTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
       MessageBox.Show("KeyPress Event: " + e.KeyChar.ToString());
        if (e.KeyChar == (char)Keys.Decimal)
       {
            MessageBox.Show("KeyPress Captured: " + e.KeyChar.ToString());
       }      
    }

由于 杰森

3 个答案:

答案 0 :(得分:4)

不要混淆虚拟键码和字符。在KeyPress事件中,您将获得由活动键盘布局从虚拟键转换的实际字符。因此:

        if (e.KeyChar == '.') {
            MessageBox.Show("Period detected");
        }

答案 1 :(得分:3)

而不是e.KeyChar尝试使用e.KeyCode

另外

if ((e.KeyCode == Keys.Decimal) || (e.Keyode == Keys.OemPeriod)) {
   //execute tabbing code
}

答案 2 :(得分:0)

你正在寻找的是OemPeriod吗?我相信十进制键是。在小键盘上。