C#winform控制键盘只输入小数的简洁写法?

hsie168518 2009-07-28 03:48:11
比如一个窗体中有(textbox1,textbox2,textbox3),我要给控制他们只能输入数字,可以
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{

if ((e.KeyChar >= '0' && e.KeyChar <= '9') || ((int)e.KeyChar == (int)System.Windows.Forms.Keys.Back))
{
e.Handled = true;
}
}
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{

if ((e.KeyChar >= '0' && e.KeyChar <= '9') || ((int)e.KeyChar == (int)System.Windows.Forms.Keys.Back))
{
e.Handled = true;
}
}

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{

if ((e.KeyChar >= '0' && e.KeyChar <= '9') || ((int)e.KeyChar == (int)System.Windows.Forms.Keys.Back))
{
e.Handled = true;
}
}

但是这样写不专业,我只想写一个方法,

然后 private void InitializeComponent(){}里面使用代理,完成相同功能,怎么写?
...全文
323 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hsie168518 2009-07-28
  • 打赏
  • 举报
回复
N
xcq123604 2009-07-28
  • 打赏
  • 举报
回复
這個控件還包括了金額的一些千分位,不需要的話,可以去掉
xcq123604 2009-07-28
  • 打赏
  • 举报
回复
重寫textBox,然後畫面上就用重寫過的控件


Public Class NumText : Inherits TextBox

Private strValue As String = ""
Private blnKingaku As Boolean

Public Sub New()
MyBase.New()
Me.TextAlign = HorizontalAlignment.Right
End Sub

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Dim WM_CHAR As Integer = &H102

If m.Msg = WM_CHAR Then
If ((m.WParam.ToInt32 >= 48 And m.WParam.ToInt32 <= 57) Or CInt(m.WParam) = CInt(Keys.Back)) Or (m.WParam.ToInt32 = 45 And Me.SelectionStart = 0) Then
MyBase.WndProc(m)
End If
Else
MyBase.WndProc(m)
End If
End Sub

Protected Overrides Sub OnEnter(ByVal e As System.EventArgs)
MyBase.OnEnter(e)

If blnKingaku Then
Me.Text = Me.Value
End If

'Me.TextAlign = HorizontalAlignment.Left
End Sub

Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
If Me.Value <> Me.Text.Replace(",", "") Then
MyBase.OnTextChanged(e)
strValue = Me.Text.Replace(",", "")
End If
End Sub

Protected Overrides Sub OnLeave(ByVal e As System.EventArgs)
MyBase.OnLeave(e)
If blnKingaku Then
If Me.Text.Trim <> "" Then
strValue = Me.Text.Replace(",", "")
Me.Text = Format(CLng(strValue), "#,##0")
End If
End If
'Me.TextAlign = HorizontalAlignment.Right
End Sub
End Class
xie_yanke 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hsie168518 的回复:]
这样固然可以,我以前看到别人照我说的那样写过,不过现在找不到代码了,顺便想温习一下
[/Quote]
如果只输入数字的话,建议你改用numericUpDown控件。不要用textbox.

如果是为了练习。。。。俺就不多话了。:D
风之影子 2009-07-28
  • 打赏
  • 举报
回复
晕:会错题意了。


sorry
风之影子 2009-07-28
  • 打赏
  • 举报
回复
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
//检测是否已经输入了小数点
bool IsContainsDot = this.textBox1.Text.Contains(".");
if ((e.KeyChar < 48 || e.KeyChar > 57) && (e.KeyChar != 8) && (e.KeyChar != 46))
{
e.Handled = true;
}
if (this.textBox1.Text.Trim().Length == 0 && (e.KeyChar == 46))//如果第一个数输入是小数点
{
e.Handled = true;
}
if (IsContainsDot && (e.KeyChar == 46)) //如果输入了小数点,并且再次输入
{
e.Handled = true;
}
try
{
if ((e.KeyChar != 8) && (e.KeyChar != 46))
{
if (this.textBox1.Text.Trim().Substring(0, 1) == "0" &&this.textBox1.Text.Trim().Length==1)
{//检测第一个如果为0,接下来必须跟小数点
if (e.KeyChar != 46)
{
e.Handled=true;
}
}
if (this.textBox1.Text.Trim().Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries).GetValue(1).ToString().Length >= 3)
{//如果小数后为三位时用户输入失效
e.Handled = true;
}
}
}
catch
{ }
}
hsie168518 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xie_yanke 的回复:]
理解,你非这么做的话,可以。。。

分别在三个TextBox的属性栏, 点击事件,设置KeyPress相同的事件为:TextBox_KeyPress,这样三个TextBox即可共用一个事件
[/Quote]

这样固然可以,我以前看到别人照我说的那样写过,不过现在找不到代码了,顺便想温习一下
xie_yanke 2009-07-28
  • 打赏
  • 举报
回复
理解,你非这么做的话,可以。。。

分别在三个TextBox的属性栏, 点击事件,设置KeyPress相同的事件为:TextBox_KeyPress,这样三个TextBox即可共用一个事件
hsie168518 2009-07-28
  • 打赏
  • 举报
回复
我是想比如定义一个事件,把控件做参数,
然后在InitializeComponent(){}中给每个textbox加上委托,这样来执行,

而不是 这样重复加这么多方法?


没有人能理解我的意思吗?
xie_yanke 2009-07-28
  • 打赏
  • 举报
回复
使用:numericUpDown
足球中国 2009-07-28
  • 打赏
  • 举报
回复
在验证事件再加一件.还有textchange
xutao888 2009-07-28
  • 打赏
  • 举报
回复
做成用户控件呗,哪儿都能用
hsie168518 2009-07-28
  • 打赏
  • 举报
回复
人呢?
hsie168518 2009-07-28
  • 打赏
  • 举报
回复
我想用代理,不知道怎么用?
__天涯寻梦 2009-07-28
  • 打赏
  • 举报
回复
既然三个完全一样,最简单的,三个文本框的事件都指向第一个
hsie168518 2009-07-28
  • 打赏
  • 举报
回复
up
hsie168518 2009-07-28
  • 打赏
  • 举报
回复
是只输入数字

110,538

社区成员

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

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

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