2013-02-04 3 views
0

나는 온라인상에서 찾고 있었지만 내가하려고하는 것에 대한 답을 찾을 수 없다. MDI 응용 프로그램을 만드는 중이고 자식 폼에 DataGrid가 있습니다. 자식 폼에서 해당 DataGrid의 DoubleClick 이벤트를 구독하는 방법을 알아야합니다.mdi 자녀의 제어 이벤트를 감지하는 방법은 무엇입니까?

그래서 Form1이 상위라고 가정 해 보겠습니다. Form2는 자식입니다. 나는 같은 형식 2를 열었습니다 :

Form2 f = new Form2 { Text = "Child", MdiParent = this }; 
f.Show(); 

그 형태 (F)에서 데이터 그리드의 사용자하고 DoubleClick, 나는 그것을 감지 할 수 있어야합니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?

답변

1

당신은 System.Windows.Forms.Control 클래스에서 DataGrid 클래스에 의해 상속 myDataGrid.DoubleClick을 사용할 수 있습니다 (I이 명확하게 설명했다 희망)

private void Form_Load() 
    { 
     myDataGrid.DoubleClick += MyDataGridOnDoubleClick; 
    } 

    private void MyDataGridOnDoubleClick(object sender, EventArgs eventArgs) 
    { 
     //throw new NotImplementedException(); 
    } 
1

AppDeveloper의 대답은 당신이 필요하지만, 내가하는 느낌이 문제의 핵심은 부모 MDI 컨테이너 (Form1)와 관련하여 Form2의 DataGrid의 기본 표시가 될 수 있습니다. Form1은 Form2의 DataGrid에있는 모든 이벤트에 가입 할 수 있습니다. 단, DataGrid가 public (또는 내부)으로 표시된 경우에만 Form1의 DataGrid에있는 이벤트를 구독 할 수 있습니다. 기본적으로 해당 자식 컨트롤은 개인으로 표시되며 따라서 Form2에만 표시됩니다.

그래서 당신이 단지에서 데이터 그리드에 대한 액세스 한정자를 변경하는 경우 개인공공에, 당신과 같이 Form1에로부터 이벤트를 수신 할 수 있어야한다 :

Form2 childForm = new Form2(); 
childForm.MdiParent = this; 
// Form2.myDataGrid must be public/internal 
childForm.myDataGrid.DoubleClick += new EventHandler(MyDataGridOnDoubleClick); 
childForm.Show(); 

가 더 나은 방법이있다 구성 요소 간의 긴밀한 결합을 피하려는 경우이 방법을 사용하십시오. 그러나이 방법은 A에서 B 로의 최단 경로입니다.

관련 문제