2013-08-13 2 views
4

먼저 내 응용 프로그램에 대해 설명하겠습니다. 직원이 내 응용 프로그램에 로그인합니다 예를 들어, 그는 넣은 것 "직원 메뉴"주 창 그리드에서 사용자 정의 컨트롤에서 사용자 컨트롤 열기 WPF

Dim Empl As New Employee 
MainGrid.Children.Add(Empl) 
Grid.SetRow(Empl, 1) 

이 Window_Loaded 이벤트에서입니다. 메뉴는 사용자 정의 컨트롤이며 다른 사용자 컨트롤을 열고 조작 할 수있는 버튼이 거의 없습니다. 내가 예를 들어 버튼 "질문"를 누르면 :

Public Class Employee 
    Dim mw As New MainWindow 
    Private Sub btnQuestionAdd_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnQuestionAdd.Click 
     Dim Que As New QuestionAdd 
     mw.MainGrid.Children.Add(Que) 
     Grid.SetRow(Que, 2) 
     Grid.SetColumn(Que, 1) 
    End Sub 
End Class 

아무것도 button_click 후로드되지 않는 이유를 모르겠어요 ..... 그것은 다른 컨트롤에서 메인 창 그리드를 탐색 할 수 열심히인가?

+0

btnQuestionAdd_Click 메서드에서 [breakpoint] (http://msdn.microsoft.com/en-us/library/vstudio/5557y8b4.aspx#BKMK_Set_a_breakpoint_in_a_source_file)를 설정하여 처음에 호출되고 있는지 확인해 보았습니까? ? 이벤트 처리가 올바르지 않은 것 같습니다. – JDB

+0

흠, Que는 아무것도 아닙니다. 내가 지금 추가로 한 것은 - 메인 윈도우에 버튼을 사용 컨트롤을로드하기위한 코드와 함께 넣었습니다. 그리고 그것은 작동하지만 EMORKEE 사용자 콜센터에는 없습니다 ... – user2678787

답변

1

많은 정보를 제공하지 않았기 때문에 이것은 추측 일 뿐이지 만 그 원인은 다음과 같습니다. 첫 번째 코드에서

, 당신은 MainForm에서 직원을 만드는 것 같다 :

Dim Empl As New Employee 
MainGrid.Children.Add(Empl) 
Grid.SetRow(Empl, 1) 

당신의 다음 코멘트는 가정을 확인하는 것 같다 :

이 Window_Loaded 이벤트에서입니다. 메뉴는 사용자 정의 컨트롤이며 다른 사용자 컨트롤을 열고 조작 할 수있는 버튼이 거의 없습니다. 나는 당신의 Employee 클래스에 아직

그리고 예를 들어 버튼 "질문"를 누르면, 당신은에 데이터를 추가 한 후 MainWindow를의 새로운 인스턴스를 생성하고 있습니다 :

Public Class Employee 
    Dim mw As New MainWindow 
    Private Sub btnQuestionAdd_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnQuestionAdd.Click 
     Dim Que As New QuestionAdd 
     mw.MainGrid.Children.Add(Que) 
     Grid.SetRow(Que, 2) 
     Grid.SetColumn(Que, 1) 
    End Sub 
End Class 

를이 관찰 인 경우 그렇다면 책으로 돌아가서 classesinstances의 개념을 이해해야한다고 생각합니다.

본질적으로 두 번째 양식 (실제로는 명시 적으로 표시하지 않기 때문에 숨김)을 작성한 다음 원래 양식이 아닌이 두 번째 양식을 수정하십시오. 이 가설을 증명하기 위해, 다음 코드 줄을 추가하십시오 :

Public Class Employee 
    Dim mw As New MainWindow 
    Private Sub btnQuestionAdd_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnQuestionAdd.Click 
     Dim Que As New QuestionAdd 
     mw.MainGrid.Children.Add(Que) 
     Grid.SetRow(Que, 2) 
     Grid.SetColumn(Que, 1) 
     mw.Show() ' <--- 
    End Sub 
End Class 

당신은 두 번째 양식이 첫 번째 양식에 기대했던 모든 변경 사항과 팝업 볼 가능성이 있습니다.

이 문제를 해결하는 가장 쉬운 방법은 MainForm을 값으로 받아들이는 매개 변수를 이니셜 라이저 ("Sub New")에 추가하는 것입니다. 필드 또는 속성 (아마도 mw 필드 만)에 값을 할당하고 즐거운 방법으로 계속 진행할 수 있습니다. 이것은 당신에게 두통을 줄 것입니다. 그렇기 때문에 software architecture, 특히 separation of concerns의 개념에 대해 더 많이 배우기 시작할 수 있습니다.

+0

그러면 Cyborgx37! 내가 한 것 : Dim mw As MainWindow = DirectCast (Application.Current.MainWindow, MainWindow) 비공유 회원을 추천했기 때문에. – user2678787

관련 문제