我用以下代码阻止在textbox里输数字以外的键,  现在我想如果键入非数字键的时后,提示"不允许输入非数字",能不能实现?不要用msgbox,这样会中断操作,类似于tooltiptext的提示代码怎么写?需不需要加什么控件  
  If (KeyAscii > 57 Or KeyAscii < 48) And KeyAscii <> 8 Then '当玩家按键不是数字 或退格键,则阻止输入
        KeyAscii = 0
        End If

解决方案 »

  1.   

    Private Sub Text1_Change()
    If Not IsNumeric(Text1.Text) Then
      Text1.Text = "你输入的不是数字,请重新输入"
      Text1.SelLength = Len(Text1.Text)
    End If
    End Sub
      

  2.   

    可以在上面加个提示Label,初始状态visable设为false
    If (KeyAscii > 57 Or KeyAscii < 48) And KeyAscii <> 8 Then '当玩家按键不是数字 或退格键,则阻止输入 
         Label.caption="输入有误,只能输入数字" 
         Label.visable=true
         KeyAscii = 0 
    else
        Label.visable=false
    End If
      

  3.   

    Private Sub Text1_KeyPress(KeyAscii As Integer)
        If (KeyAscii > 57 Or KeyAscii < 48) And KeyAscii <> 8 Then '当玩家按键不是数字 或退格键,则阻止输入
            KeyAscii = 0
            MsgBox "非数字键!"
        End If
    End Sub
      

  4.   

    不要用msgbox就自己用贴图做提示吧
      

  5.   


    Private Sub Text1_KeyPress(KeyAscii As Integer)
        If (KeyAscii > 57 Or KeyAscii < 48) And KeyAscii <> 8 Then '当玩家按键不是数字 或退格键,则阻止输入
            Text1.Locked = True
        Else
            Text1.Locked = False
        End If
    End Sub
      

  6.   

    Private Sub Text1_KeyPress(KeyAscii As Integer)
        If (KeyAscii > 57 Or KeyAscii < 48) And KeyAscii <> 8 Then '当玩家按键不是数字 或退格键,则阻止输入
            Text1.Locked = True
        Else
            Text1.Locked = False
        End If
    End Sub
      

  7.   

    个人觉得就是
    Text1.tooltiptext = "请输入数字.."
    Text1.setfocus
    一些硬性提示,会让人反感..
      

  8.   

    Private Sub Text1_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
    Case 48 To 57, 8
    Case 32 To 47, 58 To 127
    SendKeys "{BACKSPACE}"
    Beep
    End Select
    End Sub
      

  9.   

    阻止输入基本已实现,主要是弄个提示,msgbox太麻烦了,tooltiptext又半天显示不出来
      

  10.   

    引用 yinweihong 在旧帖“如何在窗体的指定位置显示气泡提示”的解决方法:'类模块CTips 里的代码Option ExplicitPrivate Declare Function CreateWindowEx Lib "user32.dll" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, ByRef lpParam As Any) As Long
    Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
    Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As LongPrivate Const WM_USER = &H400
    Private Const CW_USEDEFAULT = &H80000000Private Type RECT
        left As Long
        top As Long
        right As Long
        bottom As Long
    End TypePrivate Type POINTAPI
        X As Long
        Y As Long
    End TypePrivate Const TTS_NOPREFIX = &H2
    Private Const TTF_TRANSPARENT = &H100
    Private Const TTF_CENTERTIP = &H2
    Private Const TTM_ADDTOOLA = (WM_USER + 4)
    Private Const TTM_ACTIVATE = WM_USER + 1
    Private Const TTM_UPDATETIPTEXTA = (WM_USER + 12)
    Private Const TTM_SETMAXTIPWIDTH = (WM_USER + 24)
    Private Const TTM_SETTIPBKCOLOR = (WM_USER + 19)
    Private Const TTM_SETTIPTEXTCOLOR = (WM_USER + 20)
    Private Const TTM_SETTITLE = (WM_USER + 32)
    Private Const TTS_BALLOON = &H40
    Private Const TTS_ALWAYSTIP = &H1
    Private Const TTF_SUBCLASS = &H10
    Private Const TTF_TRACK = &H20
    Private Const TTF_IDISHWND = &H1
    Private Const TTM_SETDELAYTIME = (WM_USER + 3)
    Private Const TTDT_AUTOPOP = 2
    Private Const TTDT_INITIAL = 3
    Private Const TTM_TRACKACTIVATE = WM_USER + 17
    Private Const TTM_TRACKPOSITION = WM_USER + 18
    Private Const WS_POPUP = &H80000000Private Const TOOLTIPS_CLASSA = "tooltips_class32"Private Type TOOLINFO
        lSize As Long
        lFlags As Long
        hwnd As Long
        lId As Long
        lpRect As RECT
        hInstance As Long
        lpStr As String
        lParam As Long
    End TypePublic Enum ttIconType
        TTNoIcon = 0
        TTIconInfo = 1
        TTIconWarning = 2
        TTIconError = 3
    End EnumPublic Enum ttStyleEnum
        TTStandard
        TTBalloon
    End EnumPrivate mvarBackColor As Long
    Private mvarTitle As String
    Private mvarForeColor As Long
    Private mvarIcon As ttIconType
    Private mvarCentered As Boolean
    Private mvarStyle As ttStyleEnum
    Private mvarTipText As String
    Private mvarVisibleTime As Long
    Private mvarDelayTime As Long
    Private mvarPopupOnDemand As BooleanPrivate m_lTTHwnd As Long
    Private m_lParentHwnd As Long
    Private ti As TOOLINFOPrivate Sub Class_Initialize()
        mvarDelayTime = 500
        mvarVisibleTime = 5000
        mvarPopupOnDemand = False
    End Sub
    Private Sub Class_Terminate()
        Destroy
    End Sub
    Public Property Get VisibleTime() As Long
        VisibleTime = mvarVisibleTime
    End Property
    Public Property Let VisibleTime(ByVal lData As Long)
        mvarVisibleTime = lData
    End Property
    Public Property Get DelayTime() As Long
        DelayTime = mvarDelayTime
    End Property
    Public Property Let DelayTime(ByVal lData As Long)
        mvarDelayTime = lData
    End Property
    Public Property Let Icon(ByVal vData As ttIconType)
        mvarIcon = vData
        If m_lTTHwnd <> 0 And mvarTitle <> Empty And mvarIcon <> TTNoIcon Then
            SendMessage m_lTTHwnd, TTM_SETTITLE, CLng(mvarIcon), ByVal mvarTitle
        End If
    End Property
    Public Property Get Icon() As ttIconType
        Icon = mvarIcon
    End Property
    Public Property Let ForeColor(ByVal vData As Long)
        mvarForeColor = vData
        If m_lTTHwnd <> 0 Then
            SendMessage m_lTTHwnd, TTM_SETTIPTEXTCOLOR, mvarForeColor, 0&
        End If
    End Property
    Public Property Get ForeColor() As Long
        ForeColor = mvarForeColor
    End Property
    Public Property Let Title(ByVal vData As String)
        mvarTitle = vData
        If m_lTTHwnd <> 0 And mvarTitle <> Empty And mvarIcon <> TTNoIcon Then
            SendMessage m_lTTHwnd, TTM_SETTITLE, CLng(mvarIcon), ByVal mvarTitle
        End If
    End Property
    Public Property Get Title() As String
        Title = ti.lpStr
    End Property
    Public Property Let PopupOnDemand(ByVal vData As Boolean)
        mvarPopupOnDemand = vData
    End Property
    Public Property Get PopupOnDemand() As Boolean
        PopupOnDemand = mvarPopupOnDemand
    End Property
    Public Property Let BackColor(ByVal vData As Long)
        mvarBackColor = vData
        If m_lTTHwnd <> 0 Then
            SendMessage m_lTTHwnd, TTM_SETTIPBKCOLOR, mvarBackColor, 0&
        End If
    End Property
    Public Property Get BackColor() As Long
        BackColor = mvarBackColor
    End Property
    Public Property Let TipText(ByVal vData As String)
        mvarTipText = vData
        ti.lpStr = vData
        If m_lTTHwnd <> 0 Then
            SendMessage m_lTTHwnd, TTM_UPDATETIPTEXTA, 0&, ti
        End If
    End Property
    Public Property Get TipText() As String
        TipText = mvarTipText
    End Property
    Public Property Let Style(ByVal vData As ttStyleEnum)
        mvarStyle = vData
    End Property
    Public Property Get Style() As ttStyleEnum
        Style = mvarStyle
    End Property
    Public Property Let Centered(ByVal vData As Boolean)
        mvarCentered = vData
    End Property
    Public Property Get Centered() As Boolean
        Centered = mvarCentered
    End Property
    Public Sub Show(Optional X As Long = 0, Optional Y As Long = 0)
        Dim pt As POINTAPI
        Dim ptTip As Long
        Dim ret As Long    With pt
            .X = X
            .Y = Y
        End With
        ret = ClientToScreen(Form1.Text1.hwnd, pt)
        ptTip = pt.Y * &H10000
        ptTip = ptTip + pt.X
        ret = SendMessage(m_lTTHwnd, TTM_TRACKPOSITION, 0, ByVal ptTip)
        ret = SendMessage(m_lTTHwnd, TTM_TRACKACTIVATE, True, ti)
    End Sub
    Public Function CreateToolTip(ByVal ParentHwnd As Long) As Boolean
        Dim lWinStyle As Long
        If m_lTTHwnd <> 0 Then
            DestroyWindow m_lTTHwnd
        End If
        m_lParentHwnd = ParentHwnd
        ''create baloon style if desired
        If mvarStyle = TTBalloon Then lWinStyle = lWinStyle Or TTS_BALLOON    m_lTTHwnd = CreateWindowEx(0&, TOOLTIPS_CLASSA, vbNullString, lWinStyle, 0&, 0&, 0&, 0&, m_lParentHwnd, 0&, 0&, 0&)
        With ti
            If mvarCentered Then
                If mvarPopupOnDemand = False Then
                    .lFlags = TTF_SUBCLASS Or TTF_CENTERTIP Or TTF_IDISHWND
                Else
                    .lFlags = TTF_IDISHWND Or TTF_TRACK Or TTF_CENTERTIP
                End If
            Else
                If mvarPopupOnDemand = False Then
                    .lFlags = TTF_SUBCLASS Or TTF_IDISHWND
                Else
                    .lFlags = TTF_IDISHWND Or TTF_TRACK Or TTF_TRANSPARENT
                End If
            End If        'set the hwnd prop to our parent control's hwnd
            .hwnd = m_lParentHwnd
            .lId = m_lParentHwnd                              '0
            .hInstance = App.hInstance
            .lSize = Len(ti)
        End With
        'add the tooltip structure
        SendMessage m_lTTHwnd, TTM_ADDTOOLA, 0&, ti    'if we want a title or we want an icon
        If mvarTitle <> vbNullString Or mvarIcon <> TTNoIcon Then
            SendMessage m_lTTHwnd, TTM_SETTITLE, CLng(mvarIcon), ByVal mvarTitle
        End If
        If mvarForeColor <> Empty Then
            SendMessage m_lTTHwnd, TTM_SETTIPTEXTCOLOR, mvarForeColor, 0&
        End If
        If mvarBackColor <> Empty Then
            SendMessage m_lTTHwnd, TTM_SETTIPBKCOLOR, mvarBackColor, 0&
        End If
        SendMessageLong m_lTTHwnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, mvarVisibleTime
        SendMessageLong m_lTTHwnd, TTM_SETDELAYTIME, TTDT_INITIAL, mvarDelayTime
    End FunctionPublic Sub Destroy()
        If m_lTTHwnd <> 0 Then
            DestroyWindow m_lTTHwnd
        End If
    End Sub
      

  11.   

    '窗体代码
    Option Explicit
    Dim tip As New CTipsPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        tip.Destroy
    End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)
        If (KeyAscii > 57 Or KeyAscii < 48) And KeyAscii <> 8 Then
            Call ShowMyTip
            KeyAscii = 0
        Else
            tip.Destroy
        End If
    End SubPrivate Sub ShowMyTip()
        tip.Style = TTBalloon
        tip.Icon = TTIconError
        tip.Title = "不允许输入非数字"
        tip.TipText = " "
        tip.PopupOnDemand = True
        tip.CreateToolTip Text1.hwnd
        tip.Show Text1.Width / Screen.TwipsPerPixelX, Text1.Height / Screen.TwipsPerPixelX / 2 - 1  '//In Pixel only
    End Sub
      

  12.   


    '测试一下VB代码关键字加亮否
    Option Explicit
    Dim tip As New CTips
      

  13.   

    谢谢 xbin_2009
    我正想用此类的代码呢