覆盖对话框中的“确定”和“取消”按钮

时间:2018-07-03 22:53:50

标签: .net vb.net

我在VB.Net程序中添加了一个简单的LoginForm对话框,以便用户可以输入名称和密码。自动为“确定”和“取消”按钮生成的代码仅调用Close()。我想在允许对话框关闭之前提示用户一个问题。这是我所做的简短示例:

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
    If PasswordTextBox.Text.Length < 8 Then
        MessageBox.Show("Passwords must be at least 8 characters long.")
    Else
        Me.Close()
    End If
End Sub

Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
    Dim Result As DialogResult = MessageBox.Show("Are you sure you want to quit the program " +
        "without logging in?", "Login incomplete", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    If Result = DialogResult.Yes Then
        Me.Close()
    End If
End Sub

因此,我尝试绕过默认的Close()行为,但是对话框仍然关闭,并且在每种情况下都将OK或Close值返回给调用方。如何覆盖此行为?

1 个答案:

答案 0 :(得分:1)

按钮具有 DialogResult 属性,当该属性设置为不同于None时,单击该按钮将自动关闭对话框。 您可以使用此行为在按钮事件处理程序中编写更简单的代码

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
    If PasswordTextBox.Text.Length < 8 Then
        MessageBox.Show("Passwords must be at least 8 characters long.")
        ' Not good, stop the form's closure.
        Me.DialogResult = DialogResult.None
    End If
End Sub

在此示例中,仅当存在某些不正确的内容时,我才阻止按钮的默认行为。将窗体的DialogResult属性设置为 DialogResult.None 会阻止默认关闭,当您按下DialogResult属性设置为None的按钮时。

您的取消按钮可以使用相同的方法

相关问题