按键检测ctrl + v
我正在使用文本框keypress
事件来处理只有选定的输入。 基本上, textbox
允许用户输入可以计算的值。
即你可以输入(5*5)- (10/5)
。
当前方法检查如Convert.ToChar("*")==e.KeyChar
等…
目前它不允许用户复制粘贴值。
无论如何可以检测到keypress
事件的ctrl+v
?
更新
我现在在做什么
static IEnumerable ValidFiancialCharacters { get { if(_validFiancialCharacters==null) { _validFiancialCharacters = new List(); _validFiancialCharacters.Add(Convert.ToChar("0")); _validFiancialCharacters.Add(Convert.ToChar("1")); _validFiancialCharacters.Add(Convert.ToChar("2")); // till 9 and _validFiancialCharacters.Add(Convert.ToChar("+")); _validFiancialCharacters.Add(Convert.ToChar("-")); _validFiancialCharacters.Add(Convert.ToChar("/")); //and some other } return _validFiancialCharacters; } } public static bool ValidateInput(KeyPressEventArgs e) { if (ValidFiancialCharacters.Any(chr => chr == e.KeyChar)) { e.Handled = false; } else { e.Handled = true; } return e.Handled; }
并在按键
private void txtRate_KeyPress(object sender, KeyPressEventArgs e) { NumberExtension.ValidateInput(e); }
如果您需要同时处理两者,可以使用类似的方法完成
看看密钥代码 。 您可以检测按键的位置
所以..
创建一个包含所需输入的列表
public List KeyCodes = new List () { 8, 17, 37, 39.....etc};
并使用KeyDown
事件并使用KeyEventArgs.SuppressKeyPress属性
private void Txt1_KeyDown(object sender, KeyEventArgs e) { if (KeyCodes.Contains(e.KeyValue) || (e.KeyCode==Keys.V && e.Control)) e.SuppressKeyPress = false; else e.SuppressKeyPress=true; }
您可能需要在leave event
validation复制粘贴值,因为用户可以粘贴任何内容!
只需查看Keys.Control
KeyDown
或KeyUp
事件中的Modifiers属性
Modifiers获取KeyDown或KeyUp事件的修饰符标志。 标志指示按下了CTRL,SHIFT和ALT键的组合。
样品
的KeyDown
this.myTextBox.KeyDown += new KeyEventHandler(myTextBox_KeyDown); private void myTextBox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control) { MessageBox.Show("Hello world"); } }
或KeyUp
this.myTextBox.KeyUp += new KeyEventHandler(myTextBox_KeyUp); private void myTextBox_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control) { MessageBox.Show("Hello world"); } }
更新
要仅允许某些输入,您可以使用KeyPress
事件。
this.myTextBox.KeyPress += new KeyPressEventHandler(this.myTextBox_KeyPress); private void myTextBox_KeyPress(object sender, KeyPressEventArgs e) { int i; if (int.TryParse(e.KeyChar.ToString(), out i) || e.KeyChar == '(' || e.KeyChar == ')' || e.KeyChar == '.' || e.KeyChar == '*' || e.KeyChar == '+' || e.KeyChar == '-' || e.KeyChar == '/' // add some more) { } else e.Handled = true; // dont allow other inputs }
更多信息
由于某种原因, KeyPress
事件没有捕获“Ctrl + V”。 使用KeyDown
事件:
private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.V) { //Ctrl + V } }
要么
private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == (Keys.Control | Keys.V)) { //Ctrl + V } }
您应该使用KeyDown或KeyUp,因为KeyLress事件不是由CTRL按钮引发的,而是由“character”按钮引发的。 如果您使用KeyDown事件,您可以通过检查来检测ctrl+v
:
if (e.Control && e.KeyCode == Keys.V) { ... }
KeyPressEvent可以捕获Ctrl + V序列。
您无法通过以下方式检查它:
(Keys)e.KeyChar == Keys.V && Control.ModifierKeys == Keys.Control
你必须使用:
(int)e.KeyChar==22 && Control.ModifierKeys == Keys.Control
因为keybord生成ASCII = 22(同步空闲)。
下面的示例使TextBox能够接受带有逗号分隔符的+ – 金额,并允许按Ctrl + V进行粘贴
上述就是C#学习教程:按键检测ctrl + v分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
protected override void OnKeyPress(KeyPressEventArgs e) { if (!( char.IsNumber(e.KeyChar) || ((Keys)e.KeyChar == Keys.Back) || (e.KeyChar == ',') || (e.KeyChar == '-') || ((int)e.KeyChar==22 && Control.ModifierKeys == Keys.Control) )) { e.Handled = true; } if (e.KeyChar == ',' && base.Text.IndexOf(',') > 0) { e.Handled = true; } base.OnKeyPress(e); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1300477.html