WinForm中的输入处理什么是防止某些输入键在TextBox中使用而不阻止特殊击键(如Ctrl-V/Ctrl-C)的最佳方法?例如,只允许用户输入字符或数字的子集,例如A或B或C,而不能输入其他任何内容。如果不允许密钥,我会使用keydown事件并使用e.cancel停止密钥。如果我想在多个地方执行此操作,那么我会创建一个继承文本框的用户控件,然后添加一个属性AllowedChars或DisallowedChars来处理它。我有几个我不时使用的变体,一些允许货币格式和输入,一些用于时间编辑等。作为用户控件这样做的好处是你可以添加到它并使它成为你自己的杀手文本框。;)我对winforms使用MaskedTextbox控件。这是一个更长的解释。本质上,它不允许不符合字段标准的输入。如果您不希望人们输入除数字以外的任何内容,则根本不允许他们输入除数字以外的任何内容。这就是我通常处理这个问题的方式。正则表达式regex=newRegex("[0-9]|b");e.Handled=!(regex.IsMatch(e.KeyChar.ToString()));这将只允许数字字符和退格键。问题是在这种情况下您将不被允许使用控制键。如果您想保留此功能,我会创建自己的文本框类。我发现唯一可行的解??决方案是预先检查ProcessCmdKey中的按键是否为Ctrl-V、Ctrl-C、Delete或Backspace,如果它不是KeyPress事件中的按键之一,请使用正则表达式进行进一步验证模式。这可能不是最好的方法,但它适用于我的环境。protectedoverrideboolProcessCmdKey(refMessagemsg,KeyskeyData){//检查键以查看是否应在OnKeyPress方法中处理//此处进行此检查的原因是://1.KeyDown事件看到某些按键不同的是,例如NumKeypad1被视为小写字母A//2。KeyPress事件看不到Modifer键,因此看不到Ctrl-C、Ctrl-V等。//ProcessCmdKey的功能没有改变,它只是在做一个在//KeyPress事件运行之前预先检查switch(keyData){caseKeys.V|Keys.Control:案例Keys.C|Keys.Control:案例Keys.X|Keys.Control:caseKeys.Back:caseKeys.Delete:this._handleKey=true;休息;默认值:this._handleKey=false;休息;}returnbase.ProcessCmdKey(refmsg,keyData);}protectedoverridevoidOnKeyPress(KeyPressEventArgse){if(String.IsNullOrEmpty(this._ValidCharExpression)){this._handleKey=true;}elseif(!this._handleKey){//这是对se的最后检查eifthekeyshouldbehandled//根据验证表达式检查键代码,如果匹配则处理键//表达式应该采用正则表达式字符类的形式//例如[0-9.-]会允许小数和负数,这不强制执行顺序,只是一组有效字符//[A-Za-z0-9-_@.]将是电子邮件的所有有效字符this._handleKey=Regex.Match(e.KeyChar.ToString(),this._ValidCharExpression).Success;}if(this._handleKey){base.OnKeyPress(e);this._handleKey=false;}else{e.Handled=true;}}你可以通过TextChanged事件在文本框中使用。以上就是《C#学习教程:WinForm中的输入处理》的全部内容。EventArgse){if(txtInput.Text.ToUpper()=="A"||txtInput.Text.ToUpper()=="B"){//此处输入逻辑无效}}本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
