各位:
    我想实现以下功能:
    
    一个Textbox是给用户输入姓名用的,一个CommandButton,用来提交的。
但有时用户没有输入,并关闭窗口。(直接按右上面的小"×",并没有按设定的按钮)
    
    这时,我希望能跳出个提示框,并禁止关闭那窗口,请问应如何实现?各位师兄帮忙想一下,谢谢!

解决方案 »

  1.   

    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        If Len(Trim(Text1.Text)) = 0 Then
            MsgBox "请输入数据", vbExclamation
            Cancel = vbCancel
        End If
    End Sub
      

  2.   

    这个不难,Private Sub Form_Unload(Cancel As Integer)中的参数“Cancel”就能实现。If MsgBox("你确定要退出吗?", vbOKCancel, "提示") = vbOK Then
        '此处做要退出的相应操作
    Else
        Cancel = False
        Exit Sub
    End If
      

  3.   


    Private Sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)
        if unloadmode=vbFormControlMenu then
            msgbox "...",vbinformation
            cancel=-1
        end if
    end sub
      

  4.   

    Option Explicit
     Dim blncmd As BooleanPrivate Sub Command1_Click()
     blncmd = True
    End SubPrivate Sub Form_Load()
      blncmd = FalseEnd Sub
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        If Len(Trim(Text1.Text)) = 0 Then
            MsgBox "請輸入數據", vbExclamation
            Cancel = vbCancel
        End If
    End SubPrivate Sub Form_Unload(Cancel As Integer)
      If blncmd = True Then
        MsgBox "已經按過按鈕"
      Else
        MsgBox "沒有按"
      End If
      
    End Sub
      

  5.   

    QueryUnload 事件在一个窗体或应用程序关闭之前发生。当一个 MDIForm 对象关闭时,QueryUnload 事件先在 MDI 窗体发生,然后在所有 MDI 子窗体中发生。如果没有窗体取消 QueryUnload 事件,该 Unload 事件首先发生在所有其它窗体中,然后再发生在 MDI 窗体中。当一个子窗体或一个 Form 对象关闭时,在那个窗体中的 QueryUnload 事件先于该窗体的 Unload 事件发生。语法Private Sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)
    Private Sub MDIForm_QueryUnload(cancel As Integer, unloadmode As Integer)QueryUnload 事件语法包括下列部分:部分 描述
    cancel 一个整数。将此参数设定为除 0 以外的任何值,可在所有已装载的窗体中停止 QueryUnload 事件,并阻止该窗体和应用程序的关闭。
    unloadmode 一个值或一个常数,如返回值中所描述的,它指示引起 QueryUnload 事件的原因。
    返回值unloadmode 参数返回下列值:常数 值 描述
    vbFormControlMenu 0 用户从窗体上的“控件”菜单中选择“关闭”指令。
    vbFormCode 1 Unload 语句被代码调用。
    vbAppWindows 2 当前 Microsoft Windows 操作环境会话结束。
    vbAppTaskManager 3 Microsoft Windows 任务管理器正在关闭应用程序。
    vbFormMDIForm 4 MDI 子窗体正在关闭,因为 MDI 窗体正在关闭。
    这些常数是在对象浏览器中的 Visual Basic (VB) 对象库中列出。说明此事件的典型用法是在关闭一个应用程序之前用来确保包含在该应用程序中的窗体中没有未完成的任务。例如,如果还未保存某一窗体中的新数据,则应用程序会提示保存该数据。
    当一个应用程序关闭时,可使用 QueryUnload 或 Unload 事件过程将 Cancel 属性设置为 True 来阻止关闭过程。但是,QueryUnload 事件是在任一个卸载之前在所有窗体中发生,而 Unload 是在每个窗体卸载时发生。
      

  6.   

    本例使用一个包含两个 MDI 子窗体的 MDIForm 对象。  当从 Control 菜单中选择 Close 命令关闭一个窗体时,所显示的信息与从 File 菜单中选择 Exit 命令是不同的。  要尝试这个例子,可以先创建一个 MDIForm,然后使用菜单编辑器创建 File 菜单,该菜单中包含名为 FileExit 的 Exit 命令。  确信这个菜单项可用。在 Form1上,将 MDIChild 属性设置为 True。  将代码粘贴到相应窗体的声明部分,然后按 F5 键执行程序。'粘贴到 MDIForm1 的声明部分。
    Private Sub MDIForm_Load ()
    Dim NewForm As New Form1 ' Form1 的新实例。
    NewForm.Caption = "Form2" ' 设置标题并显示。
    End SubPrivate Sub FileExit_Click ()
    Unload MDIForm1 ' 退出应用。
    End SubPrivate Sub MDIForm_QueryUnload (Cancel As Integer, UnloadMode As Integer)
    Dim Msg ' 声明变量。
    ' 设置信息文本。
    Msg = "Do you really want to exit the application?"
    ' 如果用户单击 No 按钮,则停止QueryUnload。
    If MsgBox(Msg, vbQuestion + vbYesNo, Me.Caption) = vbNo Then Cancel = True
    End Sub' 粘贴到 Form1的声明部分。
    Private Sub Form_QueryUnload (Cancel As Integer, UnloadMode As Integer)Dim Msg ' 声明变量。
    If UnloadMode > 0 Then
    ' 如果正在退出应用。
    Msg = "Do you really want to exit the application?"
    Else
    ' 如果正好在关闭窗体。
    Msg = "Do you really want to close the form?"
    End If
    ' 如果用户单击No按钮,则停止QueryUnload。
    If MsgBox(Msg, vbQuestion + vbYesNo, Me.Caption) = vbNo Then Cancel = True 
    End Sub
      

  7.   

    QueryUnload事件的UnloadMode 参数就可以判断用户是用程序执行的关闭还是按窗口的关闭按钮执行的关闭!!