找回密码
 立即注册

QQ登录

只需一步,快速开始

chenke79

高级会员

23

主题

98

帖子

1687

积分

高级会员

积分
1687

活字格认证

chenke79
高级会员   /  发表于:2011-7-5 10:24  /   查看:12184  /  回复:17
怎样让textboxcell不允许输入非数字(0-9,',','-')

不是在失去焦点或者别的事件中验证,而是不允许输,也就是如果键盘敲了不属于0,1,2,3,4,5,6,7,8,9,',','-'的字符,文本框不会有任何变化..

是textboxcell..如果要改成numericupdowncell控件,工作量可能会比较大.

17 个回复

倒序浏览
chenke79
高级会员   /  发表于:2011-7-5 10:33:00
沙发
如果改成numericupdowncell控件,不让它那个上下箭头出来怎么做啊?
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2011-7-5 11:04:00
板凳
以下是让TextCell只处理数字键的代码,希望对您有所帮助,如果需要更精细的控制(如负号只能出现在第一个字符的位置),请修改Control_KeyPress函数中的逻辑。

C# Code

  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             this.gcMultiRow.EditingControlShowing += new EventHandler<EditingControlShowingEventArgs>(gcMultiRow_EditingControlShowing);
  4.         }

  5.         void gcMultiRow_EditingControlShowing(object sender, EditingControlShowingEventArgs e)
  6.         {
  7.             //if (gcMultiRow.CurrentCell.Name != "TextBoxCell1")
  8.             // 不是需要处理的Cell
  9.             //{
  10.             //    return;
  11.             //}

  12.             e.Control.KeyPress -= new KeyPressEventHandler(Control_KeyPress);
  13.             e.Control.KeyPress += new KeyPressEventHandler(Control_KeyPress);
  14.         }

  15.         void Control_KeyPress(object sender, KeyPressEventArgs e)
  16.         {
  17.             if (!char.IsNumber(e.KeyChar) &amp;&amp;
  18.                  e.KeyChar != '\b' &amp;&amp;
  19.                  e.KeyChar != '-' &amp;&amp;
  20.                  e.KeyChar != ',')
  21.             {
  22.                 e.Handled = true;
  23.             }
  24.         }
复制代码
VB Code

  1.     Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  2.         AddHandler gcMultiRow.EditingControlShowing, AddressOf gcMultiRow_EditingControlShowing
  3.     End Sub
  4.    
  5.     Private Sub gcMultiRow_EditingControlShowing(ByVal sender As Object, ByVal e As EditingControlShowingEventArgs)
  6.         'If gcMultiRow.CurrentCell.Name <> "TextBoxCell1" Then
  7.         '    ' 不是需要处理的Cell
  8.         '    Return
  9.         'End If

  10.         RemoveHandler e.Control.KeyPress, AddressOf Control_KeyPress
  11.         AddHandler e.Control.KeyPress, AddressOf Control_KeyPress
  12.     End Sub

  13.     Private Sub Control_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
  14.         If Not Char.IsNumber(e.KeyChar) AndAlso
  15.             e.KeyChar <> ControlChars.Back AndAlso
  16.             e.KeyChar <> "-"c AndAlso
  17.             e.KeyChar <> ","c Then
  18.             e.Handled = True
  19.         End If
  20.     End Sub
复制代码
回复 使用道具 举报
neil
论坛元老   /  发表于:2011-7-5 11:15:00
地板

回复 2# chenke79 的帖子

把NummericUpdownCell 的 ShowSpinbutton属性 改为 NotShown,  可以藏起来。   但是进入编辑状态之后,又会出来。
回复 使用道具 举报
chenke79
高级会员   /  发表于:2011-7-5 11:16:00
5#
是的,编辑状态之后可以让它不出来不??
回复 使用道具 举报
neil
论坛元老   /  发表于:2011-7-5 11:21:00
6#

回复 5# chenke79 的帖子

不行,  在Multirow 下一版本中,会增加这个功能。
回复 使用道具 举报
chenke79
高级会员   /  发表于:2011-7-15 10:57:00
7#
不好意思,又把这贴顶起来了,因为还有问题

首先,不能用数字控件,因为客户无法接受点进去后还有上下箭头

所以必须还是用celltextbox,然后按上面那样,代码做限制,不允许输入英文字母等

但这样一来,会出现一个后果,不能使用ctrl+c,ctrl+v复制键了.!?这也是客户不能接受的,

这个怎么解决呢?
回复 使用道具 举报
chenke79
高级会员   /  发表于:2011-7-15 15:12:00
8#
再顶一下
回复 使用道具 举报
Arthas
葡萄城公司职员   /  发表于:2011-7-15 15:37:00
9#

回复 8# chenke79 的帖子

有个小疑问:
如果客户不允许“禁止复制粘贴”的话,
那么如果粘贴的结果不符合要求, 怎么办?

确定好这个策略之后把Control_KeyPress函数修改成客户要求的策略应该就可以了。
似乎robert的限制就是在这里做的。
扯淡第一高手
回复 使用道具 举报
chenke79
高级会员   /  发表于:2011-7-15 16:02:00
10#
如果客户不允许“禁止复制粘贴”的话,
那么如果粘贴的结果不符合要求, 怎么办?

我在CELLTEXTBOX的VALIDATE里做了验证的
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部