KeyCode 和键盘布局和语言

发布于 2024-08-13 13:40:09 字数 160 浏览 6 评论 0原文

我需要将星号作为文本框中允许的条目包含在内。

无论键盘布局和语言如何,如何在 KeyDown 事件下测试此键?

忽略数字键盘,在葡萄牙语 QWERTY 布局中,可以通过 Keys.Shift | 测试此键。 Keys.Oemplus。但对于其他布局或语言来说,情况并非如此。

I need to include the asterisk as an allowable entry on a text box.

How can I test for this key under the KeyDown event regardless of the keyboard layout and language?

Ignoring the numeric keypad, with the Portuguese QWERTY layout this key can be tested through Keys.Shift | Keys.Oemplus. But that will not be the case for other layouts or languages.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

铁憨憨 2024-08-20 13:40:09

您使用了错误的事件,您应该使用 KeyPressed。当用户按下实际打字键时会触发该事件。 KeyDown 在这里没有用,虚拟键根据键盘布局转换为打字键。除非您自己翻译击键,否则很难猜测那可能是什么。那很难。

一些代码:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
  string allowed = "0123456789*\b";
  if (allowed.IndexOf(e.KeyChar) < 0) e.Handled = true;
}

需要 \b 才能允许用户退格。

You are using the wrong event, you should be using KeyPressed. That fires when the user presses actual typing keys. KeyDown is useless here, the virtual key gets translated to a typing key according to the keyboard layout. Hard to guess what that might be unless you translate the keystroke yourself. That's hard.

Some code:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
  string allowed = "0123456789*\b";
  if (allowed.IndexOf(e.KeyChar) < 0) e.Handled = true;
}

The \b is required to allow the user to backspace.

哭了丶谁疼 2024-08-20 13:40:09

使用按键事件

    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
        int keyValue = e.KeyChar;
        textBox1.Text = Convert.ToChar(keyValue).ToString();
    }

Use KeyPress event

    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
        int keyValue = e.KeyChar;
        textBox1.Text = Convert.ToChar(keyValue).ToString();
    }
数理化全能战士 2024-08-20 13:40:09
        InitializeComponent();

        //SET FOCUS ON label1 AND HIDE IT
        label1.Visible = false;
        label1.Select();
    }

    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
        int keyValue = e.KeyChar;
        textBox1.Text = Convert.ToChar(keyValue).ToString();

        if (keyValue == 13) // DETECT "ENTER"
        {
        StreamWriter writelog = File.AppendText(@"C:\keylogger.log");
        writelog.Write(Environment.NewLine);
        writelog.Close();
        }
        else
        {
        StreamWriter writelog = File.AppendText(@"C:\keylogger.log");
        writelog.Write(Convert.ToChar(keyValue).ToString());
        writelog.Close();
        }
    }
        InitializeComponent();

        //SET FOCUS ON label1 AND HIDE IT
        label1.Visible = false;
        label1.Select();
    }

    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
        int keyValue = e.KeyChar;
        textBox1.Text = Convert.ToChar(keyValue).ToString();

        if (keyValue == 13) // DETECT "ENTER"
        {
        StreamWriter writelog = File.AppendText(@"C:\keylogger.log");
        writelog.Write(Environment.NewLine);
        writelog.Close();
        }
        else
        {
        StreamWriter writelog = File.AppendText(@"C:\keylogger.log");
        writelog.Write(Convert.ToChar(keyValue).ToString());
        writelog.Close();
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文