求助大神!c#的winform怎么禁止textBox输入非法字符?为什么用KeyPress不起作用?

lxn_bit 2014-08-29 06:14:08
如果设置智能输入数字:从网上搜了一些方法,却不管用。
按照如下方法不管用啊:
private void textBox3_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
//阻止从键盘输入键
e.Handled = true;
if(e.KeyChar>='0' && e.KeyChar <='9')
{
e.Handled = false;
}

}
即使这样也不行
private void textBox3_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
//阻止从键盘输入键
e.Handled = true;
}

把e.Handled = false;也不行
...全文
819 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ymj921128 2014-09-01
  • 打赏
  • 举报
回复

  //写在keydown事件下
            TextBox txt = sender as TextBox;

            //屏蔽非法按键
            if ((e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) )//自己改建
            {
                e.Handled = false;
            }
            else if (((e.Key >= Key.D0 && e.Key <= Key.D9) || e.Key == Key.OemPeriod) && e.KeyboardDevice.Modifiers != ModifierKeys.Shift)
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }

//写在textchange事件下

            TextBox textBox = sender as TextBox;
            TextChange[] change = new TextChange[e.Changes.Count];
            e.Changes.CopyTo(change, 0);

            int offset = change[0].Offset;
            if (change[0].AddedLength > 0)
            {
                double num = 0;
                if (!Double.TryParse(textBox.Text, out num))
                {
                    textBox.Text = textBox.Text.Remove(offset, change[0].AddedLength);
                    textBox.Select(offset, 0);
                }
            }
不是我写的,以前逛论坛看到,觉得有用就留了下来,试试行不
bigbaddy007 2014-09-01
  • 打赏
  • 举报
回复
最快捷的方法就是用别人写好的开源库, 开源的控件类就可以实现的。。
Azrael_King 2014-08-31
  • 打赏
  • 举报
回复
那换个思路,每次在textbox的textChanged事件中判断其text属性的最后一个字符是否合法,不合法的话textbox.Text=textbox.Text.SubString(0,textbox.Text.Length-1);
我叫小菜菜 2014-08-30
  • 打赏
  • 举报
回复
引用 楼主 lxn19870906 的回复:
如果设置智能输入数字:从网上搜了一些方法,却不管用。 按照如下方法不管用啊: private void textBox3_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { //阻止从键盘输入键 e.Handled = true; if(e.KeyChar>='0' && e.KeyChar <='9') { e.Handled = false; } } 即使这样也不行 private void textBox3_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { //阻止从键盘输入键 e.Handled = true; } 把e.Handled = false;也不行
禁止输入非法内容(就是输入的时候不响应字符,用户或许会郁闷:明明按了某个键,但是文本框就是啥都没显示啊!什么况。。),个人觉得这并不是一个好的处理办法。 我觉得应该使用表单验证,这样更好控制,而且用户体验更好。 在change事件中使用验证(比如正则验证,然后使用tooltips提示错误),这样处理或者会好一点。
失落的神庙 2014-08-30
  • 打赏
  • 举报
回复
要么就控制只能使用小键盘。 要么就控制text
白衣如花 2014-08-30
  • 打赏
  • 举报
回复
在控件的属性--事件中找到keypress,把事件绑定一下
星悬_月 2014-08-30
  • 打赏
  • 举报
回复
什么情况,你的第一段代码是可以用的啊!你不会是直接把代码敲进去的吧?那样的话你需要注册事件,在InitializeComponent();函数下加上注册事件:textBox3 .KeyPress +=textBox3_KeyPress;
失落的神庙 2014-08-30
  • 打赏
  • 举报
回复
这些全是浮云 想在keydown keypress来控制 想想就够了 我如果用鼠标右键粘贴呢? 然后你是不是想禁止右键
泡泡龙 2014-08-30
  • 打赏
  • 举报
回复
换keydown吧
exception92 2014-08-30
  • 打赏
  • 举报
回复
pengxi7799 2014-08-29
  • 打赏
  • 举报
回复
我查看了你的代码,并自己做了实验,你的代码并没有问题,也是可以起到效果的,你需要检查你的Textbox是否触发了 textBox3_KeyPress 这个事件,你可以加一个断点进行调试
道玄希言 2014-08-29
  • 打赏
  • 举报
回复
貌似,系统在响应 KeyPress 事件的时候,字符就已经输入到textbox里面了额。 阻止从键盘输入键? 那想不能键盘输入,你直接将 控件的 readonly 设置为 true,或者将enabled 设置为false,就行了额。
lxn_bit 2014-08-29
  • 打赏
  • 举报
回复
等大神啊,初学者,很无助啊。

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧