messagebox第二次出现

时间:2017-04-02 20:30:02

标签: vb.net textbox

在我的代码中,当TextBox3没有任何价值时,它必须在MsgBox中显示通知,以便在TextBox1中输入值

但是当我运行它时,MsgBox通知会在屏幕上显示两次,只显示一次。

这是我的代码:

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    If TextBox3.Text = Nothing Then
        TextBox1.Clear()
        MsgBox("Enter Number to Textbox1")
    Else
        Dim digit As Integer = CInt(TextBox3.Text)
        If TextBox1.TextLength = digit Then
            Dim fields() As String = ListBox1.Text.Split(";")
            Dim idx As Integer = ListBox1.FindString(TextBox1.Text)
            If idx <> -1 Then
                ListBox1.SelectedIndex = idx
                ListBox1.SelectedIndex.ToString(fields(0))
                ListBox2.Items.Add(Now() + Space(1) + ListBox1.Text.Substring(0, 13))
                PrintDocument1.Print()
            Else
                TextBox1.Clear()
            End If
        End If
    End If
End Sub

3 个答案:

答案 0 :(得分:0)

这里的问题是事件处理程序再次被触发,因为清除textbox1等于textbox1_changed事件处理程序。您也可以禁用文本框,直到textbox3不再是任何东西。 或者快速的解决方案也是如此

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
If not TextBox1.Text = Nothing AndAlso TextBox3.text = Nothing Then
    TextBox1.Clear()
    MsgBox("Enter Number to Textbox1")
.............

答案 1 :(得分:0)

您使用的是错误的事件。清除文本框时会触发Textchanged,从而产生两个消息框。

使用LostFocus代替

答案 2 :(得分:0)

这是解决方案,

Public Class Form1
            Dim message as boolean = true    
    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
            If TextBox3.Text = Nothing Then
            If message Then 'show the message as true
            message = False 'set the message false for textbox_changed not appear again
            Textbox1.Clear()
            message = True 'set the message true for next time textbox change appear again
            MsgBox("Enter Number to Textbox3")
    End If
                    Else
                        Dim digit As Integer = CInt(TextBox3.Text)
                        If TextBox1.TextLength = digit Then
                            Dim fields() As String = ListBox1.Text.Split(";")
                            Dim idx As Integer = ListBox1.FindString(TextBox1.Text)
                            If idx <> -1 Then
                                ListBox1.SelectedIndex = idx
                                ListBox1.SelectedIndex.ToString(fields(0))
                                ListBox2.Items.Add(Now() + Space(1) + ListBox1.Text.Substring(0, 13))
                                PrintDocument1.Print()
                            Else
                                TextBox1.Clear()
                            End If
                        End If
                    End If
                End Sub