2013-10-01 100 views
0

我正在通过200个关于VB的短视频教程和处理消息框的教程,教师要求我们试着用一些其他的方法来响应更多的按钮如果声明。我得到它的工作,有点,除了我必须点击两次重试按钮之前,它将工作,我必须点击忽略按钮三次才会工作。有人能告诉我我做错了什么吗?我的代码如下。在按钮上点击多个按钮

Private Sub btnShowMsg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowMsg.Click 

    If MessageBox.Show("Click Something", "Make a Selection", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Abort Then 
     MessageBox.Show("Hey, you Aborted me!") 

    ElseIf MessageBox.Show("Click Something", "Make a Selection", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Retry Then 
     MessageBox.Show("You are trying to retry, aren't you?") 

    ElseIf MessageBox.Show("Click Something", "Make a Selection", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Ignore Then 
     MessageBox.Show("Don't you dare ignore me!!") 

    End If 
End Sub 
+0

你应该学会如何使用调试器来发现这样的问题:-) – sloth

回答

0

了解你每次调用MessageBox.Show方法一MessageBox将显示和DialogResult将被退回。

为了进一步简化逻辑,考虑下面的伪代码:

If MessageBox.Show Result = Abort 
    Show You Aborted Me 
Else If MessageBox.Show Result = Retry 
    Show You Clicked Retry 
Else If MessageBox.Show.Result = Ignore 
    Show You Ignored Me 

如果用户点击比“中止”时MessageBox时,首先展现其他任何东西,运行时将开始执行第二If声明将向用户呈现相同但是新的MessageBox

重复此过程,直到用户满足If语句的条件或者没有更多If语句需要考虑。

为了解决这个问题,你应该确保MessageBox只提供给用户一次。将DialogResult存储在本地变量中,然后评估DialogResult

Dim result as DialogResult = MessageBox.Show("Click Something", "Make a Selection", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question) 

If result = DialogResult.Abort Then 
    MessageBox.Show("Hey, you Aborted me!") 
ElseIf result = DialogResult.Retry Then 
    MessageBox.Show("You are trying to retry, aren't you?") 
ElseIf result = DialogResult.Ignore Then 
    MessageBox.Show("Don't you dare ignore me!!") 
Else 
    ' What are you going to do if the user never clicks an applicable button? 
End If 
0

你正在创建三个消息框在最坏的情况下(每If/ElseIf条款),而你应该只创建一个消息框。

商店消息框第一的结果:

' create only one MessageBox and store the result ' 
Dim result = MessageBox.Show("Click Something", "Make a Selection", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question) 

If result = Windows.Forms.DialogResult.Abort Then 
    ... 
ElseIf result = Windows.Forms.DialogResult.Retry Then 
    ... 
ElseIf ... 
    ... 
0

那是因为你的要求在每个IF的问题。您需要事先询问并存储结果值,或者您可以做一个案例声明。

Dim result As Windows.Forms.DialogResult = MessageBox.Show("Click Something", "Make a Selection", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question) 

If result = Windows.Forms.DialogResult.Abort Then 
    MessageBox.Show("Hey, you Aborted me!") 
ElseIf result = Windows.Forms.DialogResult.Retry Then 
    MessageBox.Show("You are trying to retry, aren't you?") 
ElseIf result = Windows.Forms.DialogResult.Ignore Then 
    MessageBox.Show("Don't you dare ignore me!!") 
End If 

OR

Select Case MessageBox.Show("Click Something", "Make a Selection", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question) 
    Case Windows.Forms.DialogResult.Abort 
     MessageBox.Show("Hey, you Aborted me!") 
    Case Windows.Forms.DialogResult.Retry 
     MessageBox.Show("You are trying to retry, aren't you?") 
    Case Windows.Forms.DialogResult.Ignore 
     MessageBox.Show("Don't you dare ignore me!!") 
End Select 
+0

在VB.Net中没有'switch'。你的意思是选择。 – sloth

+0

相同的东西不同的语法。 :P – UnhandledExcepSean

+0

不是。 VB.Net的“选择”比例如C#的'select' :-) – sloth