【问题标题】:In Visual Basic forms confirm exit using message box在 Visual Basic 表单中使用消息框确认退出
【发布时间】:2020-06-01 22:33:48
【问题描述】:

我有一个基本的 me.close() 按钮。如果使用弹出消息框按下它,我需要添加第二步确认。

【问题讨论】:

  • 查看FormClosing 事件。
  • 或类似:if MessageBox.Show(me, "Really?","Exit?", MessageBoxButtons.YesNo, MessageBoxIcon.Question = DialogResult.Yes) then me.Close() return end if(在 Button 的 Click 处理程序中)。 Forms 是指 Windows 窗体,对吧?
  • @Jimi,公平的选择。我想问题是如果用户尝试以任何其他方式关闭表单,您是否想要相同的提示,例如标题栏上的 关闭 按钮。如果不是,那么您的方式会更好,否则使用该事件。如果使用该事件,请务必正确使用,不要阻止Windows关机等。
  • @hunterisaacs,如果它不起作用,那么你做错了。如果你不向我们展示你做了什么,那么我们只能猜测它有什么问题。如果问题的参数已更改,请更改问题,即编辑您的问题以使用您现在使用的代码进行更新。
  • 我不知道 im getting a problem 是什么意思,也不知道 it clears 指的是什么。您可能想花时间更好地定义您的问题。如果您在某处遇到问题,则必须描述该问题(我这样做>thisthisthis,其中所有>this< 部分都清楚地说明了)。

标签: vb.net forms button


【解决方案1】:

在表单的关闭事件中,您应该初始化一个 MessageBox 并检查对话框的结果是否为“是”。如果是这样,则取消该事件。大致如下:

Public Sub MyForm_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles MyForm.FormClosing
    If MessageBox.Show("Do you want to close the form?", "Confirm", MessageBoxButtons.YesNo) <> DialogResult.Yes Then
        e.Cancel = True
    End If
End Sub

我原以为在某个地方已经有一个例子,而事实证明已经在 MSDN 上:https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.form.closing?view=netframework-4.8#examples

如有疑问,请尝试搜索 MSDN 文档。这是我个人获得 99% 信息的地方。

【讨论】:

    【解决方案2】:

    由于上述评论中提到的这个问题含糊不清,并且在阅读了大量关于如何管理标题栏 X 关闭按钮的帖子后,我想我会扩展上述答案,因为我无法输入行代码 e.Cancel = 真
    我的问题是我可以在表单上使用此代码导航回另一个表单没问题
    但是,当我想忽略导航并让调用表单显示什么都没有时,这里要注意的一行代码是 result = ""
    在阅读时,我还发现了会使标题栏上的 X 关闭按钮无效的代码
    作为奖励,我包含了一个 KeyPress 事件代码,用于执行 Application.Exit

    TitleBar X 关闭按钮代码如下

        Private Sub frmOne_Closing(sender As Object, e As EventArgs) Handles Me.Closing
    
        Const message As String = "YES Exit Progtam" + vbCrLf + vbNewLine + "NO CANCEL"
        Const caption As String = "EXIT"
    
        Dim result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question)
        If result = DialogResult.Yes Then
            Application.Exit()
        ElseIf result = DialogResult.No Then
            txtBoxOne.Text = "CANCEL"
            result = ""
            'Me.Hide() This Code Was Used On frmThree 
            'frmOne.Show()'To Navigate Back to frmOne
        End If
    End Sub
    

    下面的按键事件代码

        Public Sub frmOne_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress
        'frmOne Property KeyPreview needs to be set to True
        If Asc(e.KeyChar) = 27 Then
            'MessageBox.Show("You Pressed " & e.KeyChar)
            Application.Exit()
        End If
    End Sub
    

    禁用 X 关闭按钮的代码

        'Private Const CP_NOCLOSE_BUTTON As Integer = &H200
    'Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams
    '    Get
    '        Dim myCp As CreateParams = MyBase.CreateParams
    '        myCp.ClassStyle = myCp.ClassStyle Or CP_NOCLOSE_BUTTON
    '        Return myCp
    '    End Get
    '    'This works but NOT what I want
    'End Property
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多