今天拿到一个修改TextBox控件只输入文本的逻辑判断的任务,然后写了写,代码如下,可能存在不足,万分感谢!

///<summary>///限制文本框只能相应数字、负号、删除、左右箭头、点的按键///</summary>privatevoidtxbX_KeyDown(objectsender,KeyEventArgse){stringm_str=((TextBox)sender).Text;if(((e.KeyCode>=Keys.D0&&e.KeyCode<=Keys.D9)||e.KeyCode==Keys.OemMinus||e.KeyCode==Keys.OemPeriod||e.KeyCode==Keys.Back||e.KeyCode==Keys.Delete||e.KeyCode==Keys.Left||e.KeyCode==Keys.Right)&&!e.Shift){switch(e.KeyCode){caseKeys.OemPeriod:if(m_str.Contains('.')){e.SuppressKeyPress=true;}else{if(m_str.Trim().Length==0){e.SuppressKeyPress=true;}}break;caseKeys.OemMinus:if(m_str.Contains('-')){e.SuppressKeyPress=true;}else{if(((TextBox)sender).SelectionStart!=0){e.SuppressKeyPress=true;}}break;default:break;}}else{e.SuppressKeyPress=true;}}

有点小收获就是,知道了KeyEventArgs . SuppressKeyPress 属性和KeyEventArgs . Handled 属性的一点小区别。

KeyEventArgs.SuppressKeyPress 属性:如果键事件不应该发送到该控件,则为 true;否则为 false。注意:为了阻止用户输入,可在KeyDown事件处理程序中为此属性赋值为true,在将SuppressKeyPress设为True的同时Handled的值也会被设为True;

KeyEventArgs ..::. Handled 属性:true 表示跳过控件的默认处理;false 表示还将该事件传递给默认控件处理程序。Handled 由 Windows 窗体中的不同控件以不同的方式实现。 对于 TextBox 之类的作为本机 Win32 控件的子类的控件,它被解释为表示键消息不应该传递到基础本机控件。 如果在 TextBox 上将 Handled 设置为 true,则该控件将不会把按键 events 传递到基础 Win32 文本框控件但是它仍将显示用户键入的字符。