按键检测ctrl+v我正在使用文本框按键事件来仅处理选定的输入。基本上,文本框允许用户输入可以计算的值。即您可以输入(5*5)-(10/5)。当前方法检查如Convert.ToChar("*")==e.KeyChar等...目前它不允许用户复制粘贴值。无论如何要检测按键事件的ctrl+v吗?更新我现在正在做的事情静态IEnumerableValidFiancialCharacters{get{_validFiancialCharacters.Add(Convert.ToChar("0"));_validFiancialCharacters.Add(Convert.ToChar("1"));_validFiancialCharacters.Add(Convert.ToChar("2"));//直到9和_validFiancialCharacters.Add(Convert.ToChar("+"));_validFiancialCharacters.Add(Convert.ToChar("-"));_validFiancialCharacters.Add(Convert.ToChar("/"));//和其他一些}return_validFiancialCharacters;}}publicstaticboolValidateInput(KeyPressEventArgse){if(ValidFiancialCharacters.Any(chr=>chr==e.KeyChar)){e.Handled=false;}else{e.Handled=true;}返回e.Handled;}和按键privatevoidtxtRate_KeyPress(objectsender,KeyPressEventArgse){NumberExtension.ValidateInput(e);如果您需要同时处理这两者,可以通过类似地查看键码来完成。您可以检测按键的按下位置,以便..创建一个包含所需输入的列表publicListKeyCodes=newList(){8,17,37,39.....etc};并使用KeyDown事件并使用KeyEventArgs.SuppressKeyPress属性privatevoidTxt1_KeyDown(objectsender,KeyEventArgse){if(KeyCodes.Contains(e.KeyValue)||(e.KeyCode==Keys.V&&e.Control))e.SuppressKeyPress=false;否则e.SuppressKeyPress=true;您可能需要复制粘贴离开事件验证中的值,因为用户可以粘贴任何内容!只需查看Keys.ControlKeyDown或KeyUp事件修饰符中的Modifiers属性,即可获取KeyDown或KeyUp事件的修饰符标志。表示按下了CTRL、SHIFT和ALT组合键的标志。示例KeyDownthis.myTextBox.KeyDown+=newKeyEventHandler(myTextBox_KeyDown);privatevoidmyTextBox_KeyDown(objectsender,KeyEventArgse){if(e.KeyCode==Keys.V&&e.Modifiers==Keys.Control){MessageBox.显示(“你好世界”);}}或KeyUpthis.myTextBox.KeyUp+=newKeyEventHandler(myTextBox_KeyUp);privatevoidmyTextBox_KeyUp(objectsender,KeyEventArgse){if(e.KeyCode==Keys.V&&e.Modifiers==Keys.Control){MessageBox.Show("Helloworld");}}UPDATE要只允许某些输入,您可以使用KeyPress事件。this.myTextBox.KeyPress+=newKeyPressEventHandler(this.myTextBox_KeyPress);privatevoidmyTextBox_KeyPress(objectsender,KeyPressEventArgse){inti;if(int.TryParse(e.KeyChar.ToString(),outi)||e.KeyChar=='('||e.KeyChar==')'||e.KeyChar=='.'||e.KeyChar=='*'||e.KeyChar=='+'||e.KeyChar=='-'||e.KeyChar=='/'//添加更多){}elsee.Handled=真的;//不允许其他输入}更多信息出于某种原因,KeyPress事件未被“Ctrl+V”捕获。使用KeyDown事件:privatevoidtextBox1_KeyDown(objectsender,KeyEventArgse){if(e.Control&&e.KeyCode==Keys.V){//Ctrl+V}}或privatevoidtextBox1_KeyDown(objectsender,KeyEventArgse){if(e.KeyData==(Keys.Control|Keys.V)){//Ctrl+V}}您应该使用KeyDown或KeyUp,因为KeyLress事件不是由CTRL按钮引发的,而是由.如果您使用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。控制因为键盘生成ASCII=22(同步空闲)。下面的例子让TextBox接受+-带逗号分隔符的金额,并允许按Ctrl+V粘贴更多关于C#的学习教程,希望大家多多关注—protectedoverridevoidOnKeyPress(KeyPressEventArgse){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);}本文收集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
