我的项目中不允许EditBox为空,至少都要有数字1在里面,所以我想在检测到退格键,就算按住退格键不放,编辑框中还是有数字1在里面,我应该怎么做呢?

解决方案 »

  1.   

    只处理Backspace不合适吧?要是用户用Del删除所有字符呢?
    所以建议你在按键消息中判断编辑框是否为空,如果不是就SetWindowText("1");
      

  2.   

    你的意思是不是EditBox中必须有东西啊,如果是这样,可以在EditBox离开焦点的时候判断一下编辑框中的内容是否为空,如果是空的话,弹出提示对话框,并且把当前的焦点设为EditBox。
      

  3.   

    to:GZCompiler(编译器)
    我的意思就是不能允许编辑框为空,而且现在只要按Backspace或其他键,就弹出一个对话框说“请输入数字!”很烦人。请问大侠,如何判断呢?好像EditBox没有OnKeyDown或者OnKeyPress啊!
      

  4.   

    重载EDIT的EN_CHANGE Notify消息
    GetWindowText如果是空就SetWindowText("1");
      

  5.   

    用起来很简单
    代码
    Option Explicit
    Private Sub Form_Load()
        On Error Resume Next
        ProcOld = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        SetWindowLong hwnd, GWL_WNDPROC, ProcOld
    End Sub
    模块
    Option Explicit
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public 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
    Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Public ProcOld As Long
    Public Const GWL_WNDPROC = (-4)
    Public Const WM_COMMAND = &H111Public Function WindowProc(ByVal hwnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Select Case iMsg
        Case WM_COMMAND
            Dim s As String * 255
            GetWindowText lParam, s, 255
            Dim i As Integer
            Dim ss As String
            For i = 1 To 255
                If Mid(s, i, 1) <> Chr(0) Then
                    ss = ss & Mid(s, i, 1)
                Else
                    Exit For
                End If
            Next i
            MsgBox "标题 = " & ss & " ID = " & wParam
        End Select
        WindowProc = CallWindowProc(ProcOld, hwnd, iMsg, wParam, lParam)
    End Function