2011-02-10 2 views
0

내가 자식 창 호출하는 데 사용되는 코드 다음과 같은 :실버 자식 창은 두 번째 실행에서 웹 애플리케이션을 중단

<controls:ChildWindow xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="AtomHelpers.New_Contact" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" 
     Width="662" Height="363" 
     Title="Add New Contact" FontSize="14"> 
<Grid x:Name="LayoutRoot" Margin="2" Height="320"> 
    <Grid Margin="0,0,0,0"> 
     <sdk:Label Content="Name" Height="18" HorizontalAlignment="Left" Margin="6,12,0,0" Name="Label1" VerticalAlignment="Top" Width="120" FontSize="14"/> 
     <sdk:Label Content="Type" Height="18" HorizontalAlignment="Left" Margin="6,43,0,0" Name="Label6" VerticalAlignment="Top" Width="120" FontSize="14" /> 
     <sdk:Label Content="Reference" Height="18" HorizontalAlignment="Left" Margin="6,128,0,0" Name="Label7" VerticalAlignment="Top" Width="76" FontSize="14" /> 
     <sdk:Label Content="Department" Height="18" HorizontalAlignment="Left" Margin="6,160,0,0" Name="Label8" VerticalAlignment="Top" Width="97" FontSize="14"/> 
     <sdk:Label Content="Office" Height="18" HorizontalAlignment="Left" Margin="6,190,0,0" Name="Label9" VerticalAlignment="Top" Width="120" FontSize="14" /> 
     <sdk:Label Content="Profession" Height="18" HorizontalAlignment="Left" Margin="6,215,0,0" Name="Label10" VerticalAlignment="Top" Width="120" FontSize="14" /> 
     <sdk:Label Content="Birthdate" Height="18" HorizontalAlignment="Left" Margin="6,248,0,0" Name="Label11" VerticalAlignment="Top" Width="120" FontSize="14" /> 
     <sdk:Label Content="Primary Address" Height="18" HorizontalAlignment="Left" Margin="302,11,0,0" Name="Label12" VerticalAlignment="Top" Width="133" FontSize="14" /> 
     <sdk:Label Content="Primary Numbers" Height="18" HorizontalAlignment="Left" Margin="302,131,0,0" Name="Label13" VerticalAlignment="Top" Width="133" FontSize="14" /> 
     <sdk:Label Content="Allow Group" Height="18" HorizontalAlignment="Left" Margin="305,248,0,0" Name="Label14" VerticalAlignment="Top" Width="120" FontSize="14" /> 
     <TextBox Height="23" HorizontalAlignment="Left" Margin="95,8,0,0" Name="Namee" VerticalAlignment="Top" Width="163" MaxLength="10" IsReadOnly="True" /> 
     <TextBox Height="23" HorizontalAlignment="Left" Margin="95,156,0,0" Name="Department" VerticalAlignment="Top" Width="192" TabIndex="4" /> 
     <TextBox Height="23" HorizontalAlignment="Left" Margin="95,186,0,0" Name="Office" VerticalAlignment="Top" Width="192" TabIndex="5" /> 
     <TextBox Height="23" HorizontalAlignment="Left" Margin="95,215,0,0" Name="Profession" VerticalAlignment="Top" Width="192" TabIndex="6" /> 
     <sdk:DatePicker Height="23" HorizontalAlignment="Left" Margin="95,244,0,0" Name="DatePicker1" VerticalAlignment="Top" Width="192" TabIndex="7" /> 
     <TextBlock Height="114" HorizontalAlignment="Left" Margin="432,12,0,0" Name="AddressTextBlock" Text="" VerticalAlignment="Top" Width="172" TextWrapping="Wrap" /> 
     <TextBlock Height="114" HorizontalAlignment="Left" Margin="432,131,0,0" Name="NumberTextBlock" Text="" VerticalAlignment="Top" Width="172" TextWrapping="Wrap" /> 
     <CheckBox Height="16" HorizontalAlignment="Left" Margin="405,244,0,0" Name="GroupCheckBox" VerticalAlignment="Top" TabIndex="10" /> 
     <Button Content="E" Height="23" HorizontalAlignment="Left" Margin="264,7,0,0" Name="NameButton1" VerticalAlignment="Top" Width="23" TabIndex="0" /> 
     <ScrollViewer Height="69" HorizontalAlignment="Left" Margin="95,43,0,0" VerticalAlignment="Top" Width="163" TabIndex="1"> 
      <StackPanel HorizontalAlignment="Left" Name="stackPanel1" VerticalAlignment="Top" /> 
     </ScrollViewer> 
     <Button Content="E" Height="23" HorizontalAlignment="Left" Margin="264,39,0,0" Name="Typebutton2" VerticalAlignment="Top" Width="23" TabIndex="2" /> 
     <Button Content="E" Height="23" HorizontalAlignment="Left" Margin="608,11,0,0" Name="AddressButton" VerticalAlignment="Top" Width="23" TabIndex="8" /> 
     <Button Content="E" Height="23" HorizontalAlignment="Left" Margin="608,127,0,0" Name="NumberButton" VerticalAlignment="Top" Width="23" TabIndex="9" /> 
     <CheckBox Height="16" HorizontalAlignment="Left" Margin="93,130,0,0" Name="ReferenceCheckBox" VerticalAlignment="Top" Content="Yes" TabIndex="3" FontSize="14"/> 
     <ComboBox Height="23" HorizontalAlignment="Left" Margin="141,126,0,0" Name="ComboBox1" VerticalAlignment="Top" Width="143" IsEnabled="False" TabIndex="3"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" Margin="2,0,0,0"> 
         <TextBlock Text="{Binding Namee}" Tag="{Binding Key}"/> 
        </StackPanel> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 
     <Button x:Name="SaveOKButton" Content="Save" Width="75" Height="23" HorizontalAlignment="Left" Margin="226,288,0,0" TabIndex="11" VerticalAlignment="Top" /> 
     <Button x:Name="CancelButton" Content="Cancel" Width="75" Height="23" HorizontalAlignment="Left" Margin="319,288,0,0" TabIndex="12" VerticalAlignment="Top" /> 
    </Grid> 
</Grid> 

: 다음

Dim c As New New_Contact() 
       c.Title = "New Contact Details" 
       AddHandler c.Closed, AddressOf NewContactClosed 
       c.Show() 

입니다 자식 창에 대한 XAML

다음은 하위 창의 백엔드 코드입니다.

Partial Public Class New_Contact 
Inherits ChildWindow 
Dim contactObj As ContactObjs.Contact 
Dim org As ContactObjs.Contact 
Structure ComboItem 
    Private id As String 
    Private display As String 
    Property Key 
     Get 
      Return id 
     End Get 
     Set(ByVal value) 
      id = value 
     End Set 
    End Property 
    Property Namee 
     Get 
      Return display 
     End Get 
     Set(ByVal value) 
      display = value 
     End Set 
    End Property 
End Structure 

Public Sub New() 
    InitializeComponent() 
    contactObj = New ContactObjs.Contact 
    Dim serv As New WCFContactService.ContactsClient 
    AddHandler serv.GetTypesListCompleted, AddressOf TypeslistReceived 
    AddHandler serv.GetGroupingContactsCompleted, AddressOf ReferenceReceived 
    serv.GetTypesListAsync(App.Current.Resources("ClientID"), "Contacts Type") 
    serv.GetGroupingContactsAsync(App.Current.Resources("ClientID")) 
End Sub 

Public Sub New(ByVal contactID As String) 
    InitializeComponent() 
    'contactObj = New ContactObjs.Contact(contactID) 
    Dim serv As New WCFContactService.ContactsClient 
    AddHandler serv.GetTypesListCompleted, AddressOf TypeslistReceived 
    AddHandler serv.GetFullContactCompleted, AddressOf ContactReceived 
    AddHandler serv.GetGroupingContactsCompleted, AddressOf ReferenceReceived 
    serv.GetTypesListAsync(App.Current.Resources("ClientID"), "Contacts Type") 
    serv.GetGroupingContactsAsync(App.Current.Resources("ClientID")) 
    serv.GetFullContactAsync(contactID) 
    SaveOKButton.Content = "Update" 
End Sub 

Private Sub ReferenceReceived(ByVal sender As Object, ByVal e As WCFContactService.GetGroupingContactsCompletedEventArgs) 
    'Throw New NotImplementedException 
    ComboBox1.Items.Clear() 
    Dim result As New List(Of ComboItem) 
    For Each k As KeyValuePair(Of String, String) In e.Result 
     Dim c As New ComboItem 
     c.Key = k.Key 
     c.Namee = k.Value.ToString() 
     result.Add(c) 
    Next 
    ComboBox1.ItemsSource = result 
End Sub 

Private Sub AssignValues() 
    Namee.Text = contactObj.Inf.Namee.ToString() 

    'Reference 
    If contactObj.Inf.Referenece = "" Then 
     ReferenceCheckBox.IsChecked = False 
    Else 
     ReferenceCheckBox.IsChecked = True 
     For i = 0 To ComboBox1.Items.Count - 1 
      Dim c As ComboItem 
      c = ComboBox1.Items(i) 
      If c.Key = contactObj.Inf.Referenece Then 
       ComboBox1.SelectedIndex = i 
      End If 
     Next 
     'ComboBox1.SelectedValue = contactObj.Inf.Referenece 
    End If 

    Department.Text = contactObj.Inf.Department 
    Office.Text = contactObj.Inf.Office 
    Profession.Text = contactObj.Inf.Profession 
    Try 
     DatePicker1.SelectedDate = contactObj.Inf.Birthdate 
    Catch ex As Exception 
     DatePicker1.SelectedDate = Nothing 
    End Try 
    GroupCheckBox.IsChecked = contactObj.Inf.Group 
    If Not contactObj.Inf.PrimaryAddressKey = "" Then 
     AddressTextBlock.Text = contactObj.Inf.Addresses(contactObj.Inf.PrimaryAddressKey).ToString() 
    End If 
    If Not contactObj.Inf.PrimaryNumberKey = "" Then 
     NumberTextBlock.Text = contactObj.Inf.Numbers(contactObj.Inf.PrimaryNumberKey).ToString() 
    End If 

    'Types 
    If Not contactObj.Inf.ContactType = "" Then 
     Dim l As New List(Of String) 
     Dim t As String = "" 
     For Each k As Char In contactObj.Inf.ContactType 
      If k = "," Then 
       l.Add(t) 
       t = "" 
      Else 
       t = t + k.ToString() 
      End If 
     Next 

     Dim tc As New List(Of CheckBox) 
     For Each c As CheckBox In stackPanel1.Children 
      If l.Contains(c.Content.ToString()) Then 
       c.IsChecked = True 
      End If 
      tc.Add(c) 
     Next 
     stackPanel1.Children.Clear() 
     For Each k As CheckBox In tc 
      stackPanel1.Children.Add(k) 
     Next 
    End If 
End Sub 

Private Sub CancelButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles CancelButton.Click 
    Me.DialogResult = False 
    Me.Close() 
End Sub 

Private Sub NameButton1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles NameButton1.Click 
    Dim c As New FullName() 
    If Not contactObj.Inf.Namee.ToString() = "" Then 
     c = New FullName(contactObj.Inf.Namee) 
    End If 
    AddHandler c.Closed, AddressOf FullNameFormClosed 
    c.Show() 
End Sub 

Private Sub FullNameFormClosed(ByVal sender As Object, ByVal e As EventArgs) 
    'Throw New NotImplementedException 
    Dim k As New FullName 
    k = sender 
    With contactObj.Inf.Namee 
     .Title = k.namee.Title 
     .FirstName = k.namee.FirstName 
     .MiddleName = k.namee.MiddleName 
     .LastName = k.namee.LastName 
     .Suffic = k.namee.Suffic 
     Namee.Text = contactObj.Inf.Namee.ToString() 
    End With 

End Sub 

Private Sub Typebutton2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Typebutton2.Click 
    Dim c As New Types() 
    AddHandler c.Closed, AddressOf TypesFormClosed 
    c.Show() 
End Sub 

Private Sub TypesFormClosed(ByVal sender As Object, ByVal e As EventArgs) 
    'Throw New NotImplementedException 
    Dim c As Types = sender 
    If c.DialogResult = True Then 
     Dim t As New CheckBox 
     t.Content = c.TextBox1.Text 
     t.IsChecked = True 
     stackPanel1.Children.Add(t) 
    End If 
End Sub 

Private Sub TypeslistReceived(ByVal sender As Object, ByVal e As WCFContactService.GetTypesListCompletedEventArgs) 
    'Throw New NotImplementedException 
    stackPanel1.Children.Clear() 
    If Not e.Result.Count = 0 Then 
     For Each k As String In e.Result 
      Dim c As New CheckBox 
      c.Content = k 
      c.IsChecked = False 
      stackPanel1.Children.Add(c) 
     Next 
    End If 
End Sub 

Private Sub AddressButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles AddressButton.Click 
    If contactObj.Inf.Addresses.Count = 0 Then 
     Dim c As New Addresses(contactObj.Inf.ID) 
     AddHandler c.Closed, AddressOf AddressFormClosed 
     c.Show() 
    Else 
     Dim c As New Addresses(contactObj.Inf.ID, contactObj.Inf.Addresses) 
     AddHandler c.Closed, AddressOf AddressFormClosed 
     c.Show() 
    End If 
End Sub 

Private Sub AddressFormClosed(ByVal sender As Object, ByVal e As EventArgs) 
    'Throw New NotImplementedException 
    AddressTextBlock.Text = "" 
    Dim c As New Addresses("") 
    c = sender 
    If c.DialogResult = True Then 
     contactObj.Inf.Addresses = c.addr 
     For Each t As ContactObjs.Address In contactObj.Inf.Addresses.Values 
      If t.PrimaryAddress = True Then 
       AddressTextBlock.Text = t.ToString() 
       contactObj.Inf.PrimaryAddressKey = t.AddressID 
      End If 
     Next 
    End If 
End Sub 

Private Sub NumberButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles NumberButton.Click 
    If contactObj.Inf.Numbers.Count = 0 Then 
     Dim c As New Numbers(contactObj.Inf.ID) 
     AddHandler c.Closed, AddressOf NumbersFormClosed 
     c.Show() 
    Else 
     Dim c As New Numbers(contactObj.Inf.ID, contactObj.Inf.Numbers) 
     AddHandler c.Closed, AddressOf NumbersFormClosed 
     c.Show() 
    End If 
End Sub 

Private Sub NumbersFormClosed(ByVal sender As Object, ByVal e As EventArgs) 
    'Throw New NotImplementedException 
    NumberTextBlock.Text = "" 
    Dim c As New Numbers("") 
    c = sender 
    If c.DialogResult = True Then 
     contactObj.Inf.Numbers = c.num 
     For Each t As ContactObjs.Number In contactObj.Inf.Numbers.Values 
      If t.PrimaryNumber = True Then 
       NumberTextBlock.Text = t.ToString() 
       contactObj.Inf.PrimaryNumberKey = t.NumberID 
      End If 
     Next 
    End If 
End Sub 

Private Sub ReferenceCheckBox_Checked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles ReferenceCheckBox.Checked 
    If ReferenceCheckBox.IsChecked = True Then 
     ComboBox1.IsEnabled = True 
    Else 
     ComboBox1.IsEnabled = False 
    End If 
End Sub 

Private Sub SaveOKButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles SaveOKButton.Click 
    Select Case SaveOKButton.Content 
     Case "Save" 'Contact 
      contactObj.Inf.ContactType = "" 
      For Each k As CheckBox In stackPanel1.Children 
       If k.IsChecked = True Then 
        contactObj.Inf.ContactType = contactObj.Inf.ContactType + "," + k.Content + "," 
       End If 
      Next 
      If ReferenceCheckBox.IsChecked = True Then 
       Try 
        Dim c As New ComboItem 
        c = ComboBox1.SelectedItem 
        contactObj.Inf.Referenece = c.Key 
       Catch ex As Exception 
       End Try 
      Else 
       contactObj.Inf.Referenece = "" 
      End If 
      'dept, offi, profe 
      With contactObj.Inf 
       .Department = Department.Text 
       .Office = Office.Text 
       .Profession = Profession.Text 
       If IsNothing(DatePicker1.SelectedDate) = False Then 
        .Birthdate = DatePicker1.SelectedDate 
       End If 
       .Group = GroupCheckBox.IsChecked 
      End With 
      contactObj.Save() 
      DialogResult = True 
     Case "Update" 
      contactObj.Inf.ContactType = "" 
      For Each k As CheckBox In stackPanel1.Children 
       If k.IsChecked = True Then 
        contactObj.Inf.ContactType = contactObj.Inf.ContactType + "," + k.Content + "," 
       End If 
      Next 
      If ReferenceCheckBox.IsChecked = True Then 
       Try 
        Dim c As New ComboItem 
        c = ComboBox1.SelectedItem 
        contactObj.Inf.Referenece = c.Key 
       Catch ex As Exception 
       End Try 
      Else 
       contactObj.Inf.Referenece = "" 
      End If 
      'dept, offi, profe 
      With contactObj.Inf 
       .Department = Department.Text 
       .Office = Office.Text 
       .Profession = Profession.Text 
       If IsNothing(DatePicker1.SelectedDate) = False Then 
        .Birthdate = DatePicker1.SelectedDate 
       Else 
        .Birthdate = Nothing 
       End If 
       .Group = GroupCheckBox.IsChecked 
      End With 
      contactObj.Update(org) 
      DialogResult = True 
    End Select 
    Me.Close() 
End Sub 

Private Sub ChildWindow_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles MyBase.KeyUp 
    If e.Key = Key.Enter Then 
     SaveOKButton_Click(Nothing, Nothing) 
    End If 
End Sub 

Private Sub ContactReceived(ByVal sender As Object, ByVal e As WCFContactService.GetFullContactCompletedEventArgs) 
    'Throw(New NotImplementedException) 
    If IsNothing(e.Error) Then 
     contactObj = New ContactObjs.Contact(e.Result) 
     AssignValues() 
     org = New ContactObjs.Contact(e.Result) 
    Else 
     MessageBox.Show("Error Retreving data, please try again.", "Error", MessageBoxButton.OK) 
    End If 
End Sub 

End Class

두 번째로 처음으로 자식 창이 완벽하게 작동하지만 두 번째 시간 후에 앱이 오류없이 중지됩니다. 내가 어디 잘못되었는지 말해 주시겠습니까? 나는 여기서 함께 붙어 있습니다.

저는 문제 해결을 위해 @xscape에게 감사해야합니다. 지금은 매력처럼 작동하고 있습니다. 그러나 소스 코드를 업데이트하여 이전에 어떤 실수를했는지 알 수 있도록 비활성화시켜야합니다. 파일은 다음 위치에 있습니다. enter link description here

또한 저는 여기에 시간 문제로 해결책을 얻었습니다. 그것은 다른 사람들과 비교되지 않습니다.

답변

4

임시 해결책은이 코드를 자식 창 클래스에 추가하는 것입니다. 할 수 있다면 구글은이 문제로 실행하고 있음을 그 새로운 사람들을 위해

Private Sub Window_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Closed 

    Application.Current.RootVisual.SetValue(Control.IsEnabledProperty, True) 

최종 하위

0

가, 실버 (5)는이 버그를 해결 한 것 같다, 그래서 최신 버전으로 업데이트합니다.

관련 문제