【发布时间】:2011-03-06 21:58:34
【问题描述】:
我的问题是:
如何使用 C# 在文本框控件中禁用按住键? 例如 Boxxxxxxxxxxxxxxxxxxxxx
我不想让用户重复键盘上的任何字符。
有什么建议吗?
谢谢
【问题讨论】:
标签: c#
我的问题是:
如何使用 C# 在文本框控件中禁用按住键? 例如 Boxxxxxxxxxxxxxxxxxxxxx
我不想让用户重复键盘上的任何字符。
有什么建议吗?
谢谢
【问题讨论】:
标签: c#
对于使用 KeyDown 和 KeyUp 事件来抑制按键重复的每个人来说,这是一个额外的注意事项。如果你这样做,你需要排除捕获元键,如 Alt/Shift 等,否则当这些键被按住时,你想要的实际键将不会被发送,因为这是一个两个键组合,并且 KeyDown 和 KeyUp 事件会捕获所有键。
这适用于所有两键组合。 我没有将所有元键添加到以下示例中,只是最常见的。 您可以通过将它们添加到集合中来轻松添加自己的密钥。 扩展 BFree 的帖子:
public partial class Form1 : Form
{
private static readonly System.Collections.Generic.ICollection<System.Windows.Forms.Keys) ExcludeKeys = new System.Collections.Generic.HashSet<System.Windows.Forms.Keys)()
{
System.Windows.Forms.Keys.None,
System.Windows.Forms.Keys.Shift,
System.Windows.Forms.Keys.ShiftKey,
System.Windows.Forms.Keys.LShiftKey,
System.Windows.Forms.Keys.RShiftKey,
System.Windows.Forms.Keys.Alt,
System.Windows.Forms.Keys.Control,
System.Windows.Forms.Keys.ControlKey,
System.Windows.Forms.Keys.LControlKey,
System.Windows.Forms.Keys.RControlKey,
System.Windows.Forms.Keys.CapsLock,
System.Windows.Forms.Keys.NumLock,
System.Windows.Forms.Keys.LWin,
System.Windows.Forms.Keys.RWin
}
private bool isKeyPressed = false;
public Form1()
{
InitializeComponent();
this.textBox1.KeyDown += new KeyEventHandler(textBox1_KeyDown);
this.textBox1.KeyUp += new KeyEventHandler(textBox1_KeyUp);
}
void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (!ExcludeKeys.Contains(e.KeyCode))
{
isKeyPressed = false;
}
}
void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (!ExcludeKeys.Contains(e.KeyCode))
{
e.SuppressKeyPress = isKeyPressed;
isKeyPressed = true;
}
}
}
【讨论】:
您可以在 KeyEventArgs 上使用 SupressKeyPress 属性:
public partial class Form1 : Form
{
private bool isKeyPressed = false;
public Form1()
{
InitializeComponent();
this.textBox1.KeyDown += new KeyEventHandler(textBox1_KeyDown);
this.textBox1.KeyUp += new KeyEventHandler(textBox1_KeyUp);
}
void textBox1_KeyUp(object sender, KeyEventArgs e)
{
isKeyPressed = false;
}
void textBox1_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = isKeyPressed;
isKeyPressed = true;
}
}
【讨论】:
bool prevent = false;
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = prevent;
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
prevent = false;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
prevent = true;
}
【讨论】:
我不熟悉 c# 中的细节,但我想像这样:
while (keyIsDown){
//do nothing
}
会起作用的。如果没有办法跟踪按下的键,我会感到惊讶。
【讨论】: