2013-06-09 2 views
0

Im разработка приложения с помощью шаблона WPF У меня есть эти 2 окна: MainWindow.xaml и JungleTimer.vb которая является формой для WindowsОтображения/Закрытие формы в МОФ

У меня есть кнопка в моих главных окнах, которые показывают JungleTimer формы с помощью этого кода:

Dim JungleTimer As New JungleTimer 
     JungleTimer.Show() 

Но, как вы видите, нажав на эту кнопку несколько раз покажут несколько формы JungleTime. Я пытался использовать этот код, чтобы проверить, если JungleTimer виден, но он не работает:

Dim JungleTimer As New JungleTimer 
     If JungleTimer.Visible = False Then 
      JungleTimer.Show() 
     End If 

Я также нужен код, чтобы закрыть форму JungleTimer.

ответ

2

При создании нового JungleTimer каждый раз, когда вы нажимаете кнопку, вы всегда будете получать новый экземпляр окна. Что вам нужно сделать, так это объявить поле в классе типа JungleTimer. Первоначально это будет null (Nothing). Когда вы нажимаете кнопку, проверьте, имеет ли это поле значение или по-прежнему равно null. Если все равно null, установите его в новый JungleTimer и покажите его. Если он не равен нулю, активируйте существующее окно без создания нового экземпляра. вам также нужно будет обнаружить, когда окно закрывается, чтобы вы могли вернуть поле в нуль.

Для демонстрации создайте новое приложение WPF с двумя окнами, MainWindow (главное окно) и JungleTimer.

XAML для MainWindow:

<Window x:Class="MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="MainWindow" Height="350" Width="525"> 
<StackPanel VerticalAlignment="Center"> 
    <Button Width="100" Height="30" Click="Jungle_Click">Jungle Me</Button> 
    <Button Width="100" Height="30" Click="DeJungle_Click">De-Jungle Me</Button> 
</StackPanel> 

VB для MainWindow (извините, если это неуклюжий, я не сделал VB в течение десяти лет или около того):

Class MainWindow 

Private WithEvents _jungleTimer As JungleTimer 

Private Sub Jungle_Click(sender As Object, e As RoutedEventArgs) 

    If _jungleTimer Is Nothing Then 
     _jungleTimer = New JungleTimer 
     _jungleTimer.Show() 
    Else 
     _jungleTimer.Activate() 
    End If 

End Sub 

Private Sub DeJungle_Click(sender As Object, e As RoutedEventArgs) 

    If Not _jungleTimer Is Nothing Then 
     _jungleTimer.Hide() 
     _jungleTimer = Nothing 
    End If 

End Sub 

Private Sub CloseHandler() Handles _jungleTimer.Closed 

    _jungleTimer = Nothing 

End Sub 
End Class 

XAML для JungleWindow:

<Window x:Class="JungleTimer" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="JungleTimer" Height="300" Width="300"> 
<Grid> 
    <Label HorizontalAlignment="Center" VerticalAlignment="Center"> 
     Jungle! 
    </Label> 
</Grid> 

+0

работает очень хорошо! Спасибо! – danieljohngomez

+0

Больше всего приветствую :) – BlackWasp

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