2016-08-02 3 views
0

Есть ли способ скрыть MessageBox при загрузке формы?Есть ли способ скрыть MessageBox?

Я использовал Checkedlistbox, и уже есть checkeditems при нагрузке Form2.

Что я хочу сделать, когда я нажимаю Form1, он показывает Form2 с Checkedlistbox. Моя проблема, когда я нажимаю Form1, появляется MessageBox до Form2.

Вот мой код на vb.net:

На Form1:

Private Sub cmdSubmitModifyQuant_Click(sender As Object, e As EventArgs) Handles cmdSubmitModifyQuant.Click 
    Form2.Show() 
End Sub 

Form2 На:

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    chklstBox1Fill() 
End Sub 

Private Sub CheckedListBox1_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles CheckedListBox1.ItemCheck 
    If e.NewValue = CheckState.Checked Then 
     question = MsgBox("Area you sure you want to remove?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Message") 
     If question = MsgBoxResult.Yes Then 
      'Nevermind 
     ElseIf question = MsgBoxResult.No Then 
      e.NewValue = CheckState.Checked 
     End If 
    End If 
End Sub 

В моем коде вы можете увидеть, что я также необходимо проверить checklistbox1 ,

+2

@ shad0wk: В VB.NET имена классов форм также предоставляют экземпляр по умолчанию, поэтому да, он компилируется. –

ответ

1

Эта проблема, вероятно, заключается в том, что внутри метода chklstBox1Fill вы проверяете элементы в своем списке флажков, это приводит к тому, что событие поднимается, показывая этот флажок. Один из способов избежать этого было бы установить флаг, чтобы указать вам список заполняется и не показывать окно сообщения, когда флаг установлен:

Private FillingList As Boolean 

Private Sub chklstBox1Fill() 
    FillingList = True 

    'Rest of method here. 

    FillingList = False 
End Sub 

Private Sub CheckedListBox1_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles CheckedListBox1.ItemCheck 
    If FillingList = True Then 
     Return 
    End If 

    If e.NewValue = CheckState.Checked Then 
     question = MsgBox("Area you sure you want to remove?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Message") 
     If question = MsgBoxResult.Yes Then 
      'Nevermind 
     ElseIf question = MsgBoxResult.No Then 
      e.NewValue = CheckState.Checked 
     End If 
    End If 
End Sub 

(простите мой VB.Net, уже несколько лет, так как я написал any!)

+0

Это выглядит правильно для меня, это теоретически должно исправить проблему – David

+0

Ohh. Он должен исправить мою проблему. Спасибо вам, что в этом мире есть хороший парень. хехехе. – Rhamnold

1

Добавить булевскую переменную, которая указывает, что ваша процедура загрузки завершена или нет. Это не приведет к выполнению CheckedChanged, пока переменная не будет установлена ​​в значение True.

Dim FormLoaded As Boolean = False 

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    chklstBox1Fill() 
    FormLoaded = True 
End Sub 

Private Sub CheckedListBox1_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles CheckedListBox1.ItemCheck 
    If FormLoaded = False Then Return 'Don't execute the rest of the code if it evaluates to False. 

    If e.NewValue = CheckState.Checked Then 
     question = MsgBox("Area you sure you want to remove?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Message") 
     If question = MsgBoxResult.Yes Then 
      'Nevermind 
     ElseIf question = MsgBoxResult.No Then 
      e.NewValue = CheckState.Checked 
     End If 
    End If 
End Sub 
Смежные вопросы