많은 정보를 제공하지 않았기 때문에 이것은 추측 일 뿐이지 만 그 원인은 다음과 같습니다. 첫 번째 코드에서
, 당신은 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
를이 관찰 인 경우 그렇다면 책으로 돌아가서 classes과 instances의 개념을 이해해야한다고 생각합니다.
본질적으로 두 번째 양식 (실제로는 명시 적으로 표시하지 않기 때문에 숨김)을 작성한 다음 원래 양식이 아닌이 두 번째 양식을 수정하십시오. 이 가설을 증명하기 위해, 다음 코드 줄을 추가하십시오 :
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의 개념에 대해 더 많이 배우기 시작할 수 있습니다.
출처
2013-08-13 14:09:58
JDB
btnQuestionAdd_Click 메서드에서 [breakpoint] (http://msdn.microsoft.com/en-us/library/vstudio/5557y8b4.aspx#BKMK_Set_a_breakpoint_in_a_source_file)를 설정하여 처음에 호출되고 있는지 확인해 보았습니까? ? 이벤트 처리가 올바르지 않은 것 같습니다. – JDB
흠, Que는 아무것도 아닙니다. 내가 지금 추가로 한 것은 - 메인 윈도우에 버튼을 사용 컨트롤을로드하기위한 코드와 함께 넣었습니다. 그리고 그것은 작동하지만 EMORKEE 사용자 콜센터에는 없습니다 ... – user2678787