我正在尝试进行战斗模拟,因此我需要这样做,以便文本框仅显示和接受整数。即1、5、268。我要的是小数点后四舍五入到最接近的整数。我可能只是在做傻事,但我想不出一个可以运行的解决方案,这是到目前为止我得到的:
If AttackerMP.Text = Decimal Then
AttackerMP.Text = Integer
End If
答案 0 :(得分:1)
您可以使用Validating
事件,Decimal.TryParse
和Math.Round
Private Sub AttackerMP_Validating(sender As Object, e As EventArgs) Handles AttackerMP.Validating
Dim d As Decimal
If Decimal.TryParse(AttackerMP.Text, d) Then
Dim roundedInt = CInt(Math.Round(d))
AttackerMP.Text = roundedInt.ToString()
Else
AttackerMP.Text = ""
End If
End Sub
答案 1 :(得分:1)
这是我前一段时间只允许输入数字的
Public Function NumericOnly(ByVal eChar As Char) As Boolean
Dim chkStr As String = "0123456789"
If chkStr.IndexOf(eChar) > -1 OrElse eChar = vbBack Then
Return False
Else
Return True
End If
End Function
您可以将其放置在模块中,以便在整个解决方案中都可以访问它。然后,对于要在其中使用这种功能的任何文本框,只需将以下内容放入其KeyPress事件中即可。
e.Handled = NumericOnly(e.KeyChar)
但是请记住,总有数字上/下控件已为您完成此操作。您甚至可以轻松地限制最小/最大金额。
答案 2 :(得分:0)
我如何使文本框仅接受项目中的数字和退格键:
Private Sub Timeout_TextBox_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Timeout_TextBox.KeyPress
'Allow Numbers only and Backspace
If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
If Not Asc(e.KeyChar) = 8 Then
e.Handled = True
End If
End If
End Sub
答案 3 :(得分:0)
您不能将String =设置为数据类型。 .Text属性将始终是字符串。您可以使用内置的.net函数.GetType获取文字(12.3)或变量的数据类型。
您不能将数据类型(Integer)分配给带有等号的字符串。您将使用CInt(AttackerMP.Text)或Integer.TryParse(请参见Tim的答案)或其他几种转换/广播函数中的任何一个。
尽管蒂姆的答案是要走的路。我给你一些代码来玩。它允许您查看什么数字是什么类型。看看您是否获得了预期的结果。将12.3更改为其他数字,然后看看会发生什么。
Private Sub TestTypes()
'This will return a string
Dim t As Type = TextBox1.Text.GetType()
MessageBox.Show(t.ToString)
Dim t1 As Type = 12.3.GetType()
If t1.Equals(GetType(Decimal)) Then
MessageBox.Show("It is a decimal")
ElseIf t1.Equals(GetType(Integer)) Then
MessageBox.Show("It is an Integer")
ElseIf t1.Equals(GetType(Single)) Then
MessageBox.Show("It is a Single")
ElseIf t1.Equals(GetType(Double)) Then
MessageBox.Show("It is a Double")
End If
End Sub