【发布时间】:2017-12-06 20:27:45
【问题描述】:
看起来很奇怪,但是我的问题找不到在线解决方案!至少在 VB.NET 中。
这里是交易:
我有一个表单中的文本框(仅限于KeyPress 事件的数字),并且只要用户输入他的数据,我就希望保留两位小数。
例如,如果 TextBox 是空白的,那么当用户按下“2”时,TextBox 会显示“0,02”。然后,如果用户按下“7”,TextBox 将显示“0,27”。然后再按“6”,它显示“2,76”等等......
我设法用代码做到了小数点后一位:
Select Case Me.TextBox.Text
Case ""
Case ","
Me.TextBox.Text = ""
Case Else
Me.TextBox.Text = Strings.Left(Replace(Me.TextBox.Text, ",", ""), Strings.Len(Replace(Me.TextBox.Text, ",", "")) - 1) & "," & Strings.Right(Replace(Me.TextBox.Text, ",", ""), 1)
Me.TextBox.SelectionStart = Len(Me.TextBox.Text)
End Select
请注意:1. 此代码在TextChanged 事件上运行; 2.我来自葡萄牙,在这里我们使用逗号 (",") 而不是点 (".") 作为小数分隔符。
您能帮我调整一下我的代码,使其在保留两位小数的情况下正常工作吗?
任何帮助将不胜感激。和往常一样,提前谢谢大家。
【问题讨论】:
-
我不会更改文本,而是使用
Leave事件,这样您就不必与放入其中的十进制字符竞争。然后使用ToString(0使用文化使用的任何十进制字符 -
您使用了错误的事件,请改用 Validating 事件。 Decimal.TryParse + Decimal.ToString 应该很有用。
-
stackoverflow.com/questions/16035506/… 一个相对类似问题的 c# 答案,它可能会对你有所帮助!
-
@Plutonix,@Hans Passant,对不起,当您完成输出时,
Leave和Validating事件都会发生,我很确定。只要用户填写TextBox,我希望代码运行。 -
@Kevin,我去看看。