善根深厚的人表现:编程中如何实现如果输入非数字弹出msgbox警告?

来源:百度文库 编辑:高校问答 时间:2024/04/30 08:35:18
如题。。。。。。。
可以用isnumber函数编吗?

如果您指的是VB,可以这样:

sub ProcessABC

Err.Clear
On Error Resume Next

'这里假设是你要运行的语句,因为一旦捕捉到一个错误,如果下一句也有错误,上面的语句会继续往下执行的,所以要一个错误一个错误的捕捉。

If Err.Number <> 0 Then
MsgBox Err.Description '或者MsgBox "错误发生,根据Err.Number作出不同的反应。
Err.Clear
End If

End Sub

TextBox 的输入控制
TextBox 的 KeyPress 事件的参数 KeyAscii 是以指针的方式传递(准确的说是按引用传递的)的,所以能通过对它的赋值起到控制其输入的目的:

Private Sub 输入框_KeyPress(KeyAscii As Integer)
If KeyAscii > vbKey9 Or KeyAscii < vbKey0 Then
KeyAscii = 0
Beep
End If
End Sub

如果有多个 TextBox 需要控制,可以这样在 KeyPress 事件中调用过程:

Private Sub 输入框_KeyPress(KeyAscii As Integer)
字符过滤 KeyAscii
End Sub

如果将需要控制的 TextBox 定义为控件数组,会更方便,只是有一些限制。

“字符过滤”在标准模块中定义:

Option Explicit
Private Const vbKeyDot = 46
Public Enum 过滤方式
只留整数
只留十六进制
只留数字
End Enum

Public Sub 字符过滤(字符 As Integer, Optional 方式 As 过滤方式 = 只留整数)
If 字符 > 26 Then
Select Case 方式
Case 只留整数
If 字符 > vbKey9 Or 字符 < vbKey0 Then
字符 = 0
Beep
End If
Case 只留数字 '可能输入多个小数点
If (字符 > vbKey9 Or 字符 < vbKey0) And 字符 <> vbKeyDot Then
字符 = 0
Beep
End If
Case 只留十六进制
Select Case 字符
Case vbKey0 To vbKey9, vbKeyA To vbKeyF, 97 To 102
Case Else
字符 = 0
Beep
End Select
End Select
End If
End Sub

可能你已经注意到了我先检测“If 字符 > 26”,那么,“字符 < 26”是什么呢?原来是“Ctrl + 字母”。比如:“Ctrl + V”时,“字符”的值为 22 ,这时将“字符”赋值为 0 ,就使“粘贴”操作不被执行,这样,几乎所有的 TextBox 操作都能控制了。