任何想法如何停止的时候拉响系统铃声CTRL- A用来选择在WinForms应用程序的文本?
这是问题所在.创建一个Winforms项目.在表单上放置一个文本框,并在表单上添加以下事件处理程序,以允许CTRL- A选择文本框中的所有文本(无论哪个控件具有焦点).
void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control)
{
System.Diagnostics.Debug.WriteLine("Control and A were pressed.");
txtContent.SelectionStart = 0;
txtContent.SelectionLength = txtContent.Text.Length;
txtContent.Focus();
e.Handled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
它有效,但是尽管e.Handled = true,系统铃声每次都会响起CTRL- A按下.
谢谢回复.
Form上的KeyPreview设置为true - 但这不会阻止系统响铃发声 - 这是我试图解决的问题 - 烦人.
有没有办法将WPF转换KeyEventArgs.Key为Char?
我试着用KeyInterop:
var x = (Char)KeyInterop.VirtualKeyFromKey(e.Key);
Run Code Online (Sandbox Code Playgroud)
对于数字和字母,它工作正常,但对于其他字符,它没有.例如,OemComma它返回'1/4'而不是','.
我需要它来防止用户输入TextBox除数字和分隔符(即逗号或句号)之外的任何字符.
有没有办法确定一个键是否是字母/数字(A-Z,0-9)KeyEventArgs?或者我必须自己制作?我用e.KeyCode找到了一种方法,那是准确的吗?
if(((e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z )
|| (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 )
|| (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))
Run Code Online (Sandbox Code Playgroud) 我有System.Windows.Input.KeyEventArgs变量.我想获得真正的焦炭.例如,我按下}键盘上的按钮.通常它返回字符串, oem..但我想得到}char.怎么做 ?
[编辑]我在TextBox中使用它.
我对这个问题KeyEventArgs的KeyCode和KeyData和KeyValue.
KeyCode并且Keydata是键类型,但我不知道它们之间有什么区别.因为KeyValue,我不知道它是什么 - 它有一个int类型,它是否返回char按下的键的值?
我对Key事件没有多少经验; 任何关于它们如何运作以及如何使用它们的解释将不胜感激.
我需要将事件args作为a char,但是当我尝试转换Key枚举时,我得到的字母和符号与传入的字母和符号完全不同.
你如何正确地将Key转换为char?
这就是我尝试过的
ObserveKeyStroke(this, new ObervableKeyStrokeEvent((char)((KeyEventArgs)e.StagingItem.Input).Key));
Run Code Online (Sandbox Code Playgroud)
编辑:我也没有args上的KeyCode属性.我从InputManager.Current.PreNotifyInput事件中获取它们.
首席开发人员表示,当他使用我的应用程序时,当他通过方向箭头键在TableLayoutPanel上的TextBoxes之间移动时,他的键盘会发出蜂鸣声.
但是,我听不到这种听觉活动.
这是我的代码:
// Had to intercept Up and Down arrows from Windows
private void textBoxPlatypi_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
TextBox tb = (TextBox)sender;
if (e.KeyCode.Equals(Keys.Up)) {
SetFocusOneRowUp(tb.Name);
return;
}
if (e.KeyCode.Equals(Keys.Down)) {
SetFocusOneRowDown(tb.Name);
return;
}
}
private void textBoxPlatypi_KeyDown(object sender, KeyEventArgs e) {
TextBox tb = (TextBox)sender;
if (e.KeyCode.Equals(Keys.Left)) {
SetFocusOneColumnBack(tb.Name);
e.Handled = true;
return;
}
if (e.KeyCode.Equals(Keys.Right)) {
SetFocusOneColumnForward(tb.Name);
e.Handled = true;
return;
}
}
Run Code Online (Sandbox Code Playgroud)
..他想也许我需要"e.Handled",但这在PreviewKeyDown事件中不可用.
有没有办法抑制哔哔声(这显然只发生在某些键盘或特定设置上(他使用的是Windows7,我还在使用XP))?
我现在有了这个代码:
private void textBoxPlatypus1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
switch (e.KeyCode) …Run Code Online (Sandbox Code Playgroud) 如何在WPF应用程序中尽可能简单地禁止Backspace-Key?
KeyDown-Event不会捕获DEL和Backspace-Key.
谢谢!
我正在捕捉一个KeyDown事件,我需要能够检查当前按下的键是否为:Ctrl+ Shift+ M ?
我知道我需要使用e.KeyData来自KeyEventArgs中,Keys枚举和一些与枚举标志和位,但我不知道如何检查相结合.
我正在尝试构建一个具有按钮的程序,每次单击该按钮时,它都会移动按钮并添加到分数中.但是,我试图禁用Enter键,或按下时禁止命令.这是我到目前为止所拥有的
private void button1_Click(object sender, EventArgs e, KeyEventArgs k)
{
if (k.KeyCode == Keys.Enter)
{
k.SuppressKeyPress = true;
}
score = score + 10;
timesClicked++;
int rand1 = RandomNumber(1, 400);
int rand2 = RandomNumber(1, 400);
button1.Location = new Point(rand1, rand2);
toolStripScore.Text = ("Your score is " + score);
toolStripClicks.Text = ("You've clicked the button{0} times " + timesClicked);
winCheck();
}
Run Code Online (Sandbox Code Playgroud)
这是我为阻止输入密钥进入而添加的内容.
if (k.KeyCode == Keys.Enter) { k.SuppressKeyPress = true; }
Run Code Online (Sandbox Code Playgroud)
然而,它会生成错误..."'button1_Click'没有重载匹配委托'System.EventHandler'"当单击以显示位置时,它会打开Form1.Designer的代码并指向此行."this.button1.Click + = new System.EventHandler(this.button1_Click);"
任何有关解决此问题的帮助都将非常感激.
keyeventargs ×10
c# ×9
wpf ×4
winforms ×3
.net ×2
arrow-keys ×1
beep ×1
enum-flags ×1
enums ×1
key-value ×1
keycode ×1
keydown ×1
suppression ×1
textbox ×1