KeyCode и раскладка клавиатуры и язык - PullRequest
2 голосов
/ 06 декабря 2009

Мне нужно включить звездочку в качестве допустимой записи в текстовом поле.

Как я могу проверить эту клавишу в событии KeyDown независимо от раскладки клавиатуры и языка?

Игнорируя цифровую клавиатуру, с португальской раскладкой QWERTY эту клавишу можно проверить с помощью Keys.Shift | Keys.Oemplus. Но это не будет иметь место для других макетов или языков.

Ответы [ 4 ]

2 голосов
/ 06 декабря 2009

Вы используете неправильное событие, вы должны использовать KeyPressed. Это срабатывает, когда пользователь нажимает реальные клавиши ввода. KeyDown здесь бесполезен, виртуальная клавиша переводится на клавиатуру в соответствии с раскладкой клавиатуры. Трудно догадаться, что это может быть, если вы сами не переведете нажатие клавиши. Это сложно.

Код:

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

\ b требуется, чтобы позволить пользователю вернуться назад.

1 голос
/ 06 декабря 2009

http://www.morethannothing.co.uk/2009/02/using-vkkeyscanex-to-find-out-what-keys-should-be-pressed-to-produce-a-character/ может помочь.

[Редактировать] Следует отметить, что независимо от того, обработка KeyPressed, вероятно, является лучшей тактикой.

0 голосов
/ 06 февраля 2016
        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();
        }
    }
0 голосов
/ 05 февраля 2016

Использовать событие KeyPress

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