送分题(系列):来拿吧,聪明的你

daizi2007 2005-11-27 01:12:52
如何防止在TEXT里输入非数字.比如"123","203"正确;而"29a","_82"等错误?
还有怎么知道从文件读出来的数据含有非数字?
...全文
232 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
laidon 2005-11-27
  • 打赏
  • 举报
回复
干嘛不在Text1_change中判断输入的是不是数字呢?
qidaozhilong 2005-11-27
  • 打赏
  • 举报
回复
哈哈,我想了一想.发现,其实根本不要+API来防止粘贴,因为"Ctrl+V"的时候已经屏蔽掉了"Ctrl"键了,所以已经无法"粘贴了"
还有,"1234567890"把"backspace"也屏蔽掉了,只能增不能减,哈哈.
chuting1 2005-11-27
  • 打赏
  • 举报
回复
哇,楼上的虽然好,但代码太多了,不能每遇到这样的都要这样做啊,我觉得在确定事件里判断也更好,(写一功能函数调用)
faysky2 2005-11-27
  • 打赏
  • 举报
回复
不过上面的方法不能阻止用户粘贴,要想阻止用户粘贴,用下面的代码:
模块代码:
Option Explicit

Public OldWindowProc As Long

Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Const GWL_WNDPROC = (-4)

Private Const WM_CONTEXTMENU = &H7B
Private Const WM_PASTE = &H302
' *********************************************
' Pass along all messages except the one that
' makes the context menu appear and paste.
' *********************************************
Public Function NewWindowProc(ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If (msg <> WM_PASTE) And (msg <> WM_CONTEXTMENU) Then
NewWindowProc = CallWindowProc( _
OldWindowProc, hWnd, msg, wParam, _
lParam)
End If
End Function

窗体代码:
Option Explicit

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const ES_NUMBER = &H2000
Private Sub Form_Load()
Dim style As Long

' Get the current style.
style = GetWindowLong(Text1.hWnd, GWL_STYLE)

' Add ES_NUMBER to the style.
SetWindowLong Text1.hWnd, GWL_STYLE, style Or ES_NUMBER

' Subclass to ignore the context menu.
OldWindowProc = SetWindowLong( _
Text1.hWnd, GWL_WNDPROC, _
AddressOf NewWindowProc)
End Sub

Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Text1.hWnd, GWL_WNDPROC, OldWindowProc
End Sub

faysky2 2005-11-27
  • 打赏
  • 举报
回复
Private Sub Text1_KeyPress(KeyAscii As Integer)
Const strIn As String = "1234567890"
Debug.Print Chr(KeyAscii)
If InStr(strIn, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End Sub
leady27 2005-11-27
  • 打赏
  • 举报
回复
Private Sub txtTimeout_KeyPress(KeyAscii As Integer)
If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8) Then
KeyAscii = 0
End If
End Sub
'仅允许输入数字,并且BACKSPACE键可以用.
rainstormmaster 2005-11-27
  • 打赏
  • 举报
回复
用setwindowlong为textbox附加ES_NUMBER风格即可
daizi2007 2005-11-27
  • 打赏
  • 举报
回复
抢分巴,我daizi200*说话爽快,给分利索.还有其他问题,以后再问,哈哈

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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