2015-07-27 2 views
0

У меня есть приложение, которое открывает две формы в первичных и вторичных мониторах. Обе формы имеют одинаковый код, и у меня есть их настройка, поэтому, когда я нажимаю клавишу Escape, обе формы должны закрываться, но одна из форм не закрывается.Закрывающая форма во вторичном экране

Код: Form1

Public class Form1 
Dim obj As New Form2 
Dim obj2 As New Form3 

Public Closecheck As Boolean = False 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
       Me.Hide() 

       Obj2.Location = Screen.AllScreens(UBound(Screen.AllScreens)).Bounds.Location 
       Obj.Show() 
       Obj2.Show() 
End Sub 

Form2

Public Class Form2 

Prive Sub Form2_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 
If e.KeyCode = Keys.Escape Then 
      Form1.Closecheck = True 
      Form3.Closeout3() 
      Me.Close() 
Form1.show 
End if 
    Public Sub Closeout2() 
      If Form1.Closecheck = True Then 
       MsgBox(Form1.Closecheck) 
       Me.Close() 
      End If 
     End Sub 

Форма Form3

Public Class Form3 

Private Sub Form3_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 
     If e.KeyCode = Keys.Escape Then 
      Form1.Closecheck = True 
      Form2.Closeout2() 
      Me.Close() 
Form1.show 

End Sub 
Public Sub Closeout3() 
     If Form1.Closecheck = True Then 
      MsgBox(Form1.Closecheck) 
      Me.Close() 
     End If 

    End Sub 

MsgBox на Form2 и Форма Form3 только там, дайте мне знать, что они находят Booloean Closecheck Но когда второй MsgBox открывается в i ts экран весь экран заморожен, и я не могу закрыть MsgBox. Скорее всего, тот факт, что форма все еще открыта.

+0

Вы используете экземпляр по умолчанию ваших форм, когда вы делаете Form1.CloseCheck и тому подобное. Ваши формы называются obj и obj2. Form2 и Form3 не видны. Вам нужно установить родительский элемент в Form1 при их создании. –

+0

Также опечатка в строке 2: вы хотите, чтобы 'Form2' не' From2' – Josh

+0

Использование MsgBox для отладки не является идеальным. Окно сообщения может помешать работе вашего кода. Лучше использовать Debug.WriteLine и т. Д. – LarsTech

ответ

0

Вот один из способов сделать это, используя переменные, объявленные в Form1. Form2 и Form3 просто закрываются и позволяют Form1 заботиться обо всем остальном. Обратите внимание, как F2 и F3 были объявлены как WithEvents.

Form1:

Imports System.IO 
Imports System.Resources 

Public Class Form1 

    Private WithEvents F2 As Form2 
    Private WithEvents F3 As Form3 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     If IsNothing(F2) Then 
      F2 = New Form2 
      F2.StartPosition = FormStartPosition.Manual 
      F2.Location = Screen.AllScreens.First.Bounds.Location 
     End If 
     If IsNothing(F3) Then 
      F3 = New Form3 
      F3.StartPosition = FormStartPosition.Manual 
      F3.Location = Screen.AllScreens.Last.Bounds.Location 
     End If 

     F2.Show() 
     F3.Show() 
     Me.Hide() 
    End Sub 

    Private Sub F2_FormClosed(sender As Object, e As FormClosedEventArgs) Handles F2.FormClosed 
     F2 = Nothing 
     If Not IsNothing(F3) Then 
      F3.Close() 
     Else 
      Me.Show() 
     End If 
    End Sub 

    Private Sub F3_FormClosed(sender As Object, e As FormClosedEventArgs) Handles F3.FormClosed 
     F3 = Nothing 
     If Not IsNothing(F2) Then 
      F2.Close() 
     Else 
      Me.Show() 
     End If 
    End Sub 

End Class 

Form2:

Public Class Form2 

    Private Sub Form2_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 
     If e.KeyCode = Keys.Escape Then 
      Me.Close() 
     End If 
    End Sub 

End Class 

Форма Form3:

Public Class Form3 

    Private Sub Form2_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 
     If e.KeyCode = Keys.Escape Then 
      Me.Close() 
     End If 
    End Sub 

End Class 
Смежные вопросы