我在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值返回给调用方。如何覆盖此行为?
答案 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的按钮时。
您的取消按钮可以使用相同的方法