2017-01-28 1 views
-1

전화 문의 DataGrideEventHandlerColumnHeaderMouseClick dataGridView_ColumnWidthChanged 이벤트 핸들러에서?다른 이벤트 처리기에서 이벤트를 호출하는 방법은 무엇입니까?

private void dataGridView1_ColumnHeaderMouseClick(object sender, 
                DataGridViewCellMouseEventArgs e) 
{ 
     //some code 
} 

private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e) 
{ 
    dataGridView1_ColumnHeaderMouseClick(sender,e);//its not working 
} 
+0

이벤트 처리기의 코드를 다른 방법으로 이동하십시오. 대신 하나 불러주세요. –

답변

0

당신은 단지 이벤트를 트리거하기 위해 이것을 사용할 수 있습니다 :

dataGridView1_ColumnHeaderMouseClick(new object(), null); 

다른 유형을 전달하려고 노력하고 있기 때문에 코드가 작동하지 않는 이유. DataGridViewCellMouseEventArgs 대신 DataGridViewColumnEventArgs을 전달했습니다.

희망이 있습니다. 당신이 정말로 (이 스파게티 코드가 될 경향이 있기 때문에) 이렇게 할 경우

+0

감사합니다. 맞습니다. eventArgs의 다른 유형이 있습니다. 코드가 작동하지 않습니다. –

+0

Ooops, 고쳐졌습니다. – mindOfAi

1

는, 당신은이 같은 ColumneHeaderMouseClick에 null을 전달할 수 있습니다

private void dataGridView1_ColumnHeaderMouseClick(object sender, 
                DataGridViewCellMouseEventArgs e) 
{ 
     //some code, but do not rely on e != null 
} 

private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e) 
{ 
    dataGridView1_ColumnHeaderMouseClick(sender, null); 
} 

하지만 난에서 가능한 한 많은 코드를 추출하는 recomment UI 코드의 밀접한 결합을 피하기 위해 다른 클래스에 대한 이벤트 핸들러.

0

동일한 sender이지만 다른 EventArgs과 다른 서명이 있습니다. 따라서 다시 EventArgs을 다시 작성해야합니다.

private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e) 
{ 
    var margs = new MouseEventArgs(MouseButtons, 1, MousePosition.X, MousePosition.Y, 0); 
    var args = new DataGridViewCellMouseEventArgs(e.Column.Index, 0, MousePosition.X, MousePosition.Y, margs); 
    dataGridView1_ColumnHeaderMouseClick(sender, args); 
} 
관련 문제