0

을 발사하지 된 DataGridView mouseDown 이벤트 양식 I가 비주얼 스튜디오에 VS.NET Visual Basic에서 작성된 응용 프로그램 2005.NET 윈도우

이있는에서 검색 한 데이터를 표시하는 데에 DataGridView 제어하는 ​​Windows 양식, 데이터 베이스.

사용자가 레코드를 마우스 오른쪽 단추로 클릭하고 컨텍스트 메뉴를보고 데이터베이스에서 레코드를 삭제하기 위해 삭제를 클릭 할 수있게하려고합니다.

불행하게도 나는 심지어 마우스를 내려하거나 여기

(중단 점 설정으로, 디버그 모드에서) 화재 이벤트를 클릭 할 수있는 것은 내 코드입니다 :

Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick 
    MessageBox.Show("You right-clicked on the grid at", "Unpaid", MessageBoxButtons.OK) 
End Sub 

Private Sub DataGridView1_CellMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick 
    MessageBox.Show("You right-clicked on the grid at", "Unpaid", MessageBoxButtons.OK) 
End Sub 

Private Sub DataGridView1_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown 

    If e.Button = Windows.Forms.MouseButtons.Right Then 
     MessageBox.Show("Clicked right") 
    else 
     MessageBox.Show("Clicked left") 
    End If 

    Dim r As Rectangle 
    if (e.RowIndex >= 0 && e.ColumnIndex >= 0 && e.Button == MouseButtons.Right) 
     DataGridView1.Rows(e.RowIndex).Selected = True 
     r = DataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, True) 
     contextMnu.Show(DataGridView1, r.Left + e.X, r.Top + e.Y) 
    End If 
End Sub 

Private Sub DeleteChequeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DeleteChequeToolStripMenuItem.Click 
    MessageBox.Show("You right-clicked on the grid", "Unpaid", MessageBoxButtons.OK) 
End Sub 

당신이 볼 수 있듯이, I 어떤 이벤트를 발생 시키려고 시도하고, 어떤 이벤트도 발생 시키며, 마우스 오른쪽 버튼을 클릭하거나 왼쪽 클릭을해도 코드가 실행되지 않습니다.

BTW, 런타임에 그리드의 데이터가, 그리고 내가 아는 한, 그것은 사용할 수 있습니다

그래서 내가 잘못 여기서 뭐하는거야? DataGridView 컨트롤에 추가해야 할 기능이 있습니까?

답변

1

코드로 재생 중이었고 CellMouseDown이 채워진 DataGridview의 셀을 클릭하면 작동합니다. 필자는 디자인 타임에 수동으로 데이터를 채 웠습니다. 나는 런타임 모드 중에 이것을 시도하지 않았다.

빈 DataGridView1을 사용하여 MouseDown() 및 DoubleClick()이 발생하지 않도록 할 수 있습니다. 그러나이 자체로는 클릭하는 셀을 알 수 없습니다. 또한 MouseDown은 DoubleClick보다 우선 적용되며 여기서는 두 번 클릭하지 않습니다.

Private Sub DataGridView1_MouseDown(sender As Object, e As MouseEventArgs) Handles  DataGridView1.MouseDown 
    If e.Button = Windows.Forms.MouseButtons.Right Then 

     MessageBox.Show("Clicked right") 
    Else 
     MessageBox.Show("Clicked left") 
    End If 
End Sub 

Private Sub DataGridView1_DoubleClick(sender As Object, e As EventArgs) Handles DataGridView1.DoubleClick 
    MessageBox.Show("Double Clicked") 
End Sub 

[편집 2013년 2월 25일]

나는 동적으로 다음 코드를 사용하여 DataGridView에 데이터를 추가하려고

:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Dim testData As New List(Of String) 
    testData.Add("1") 
    testData.Add("2") 
    testData.Add("3") 
    Dim dataBindingSource As New BindingSource 
    dataBindingSource.DataSource = testData 
    DataGridView1.DataSource = dataBindingSource 
End Sub 

나는 여전히 DataGridView1_CellMouseDown 이벤트를 발사 할 수 있습니다. 아마도 당신은 단지 datagridview와 함께 빈 프로젝트를 시도해보고 문제가 발생한 곳을 보려고 시도 할 수 있습니까?

+0

내 디버그 문제는 양식 부모 (MDI Form MDI Child)와 관련이 있습니까? –

+0

아, 첫 번째 플레이트에서 언급 했어야합니다. "Handles "이 이벤트 호출이없는 곳에 동일한 문제가있는 것으로 나타났습니다. 보유한 모든 이벤트를 제거하고 Child form GUI 이벤트 추가 기능에서 이벤트 cellmousedown을 추가하십시오. 그런 다음 Intellisense가 가져 오는 선택 사항을 보려면 이벤트 후 "Handles"를 입력하십시오. DataGridView1.CellMouseDown을 선택했습니다. 그러면 이벤트가 정상적으로 발생하는 것 같습니다. – Patratacus

+0

또한 기본 양식을 부모로 사용하도록 하위 양식을 설정하고 있습니까? 부모 형태로 이런 식으로 : FormChild.MdiParent = Me – Patratacus

0

대단히 죄송합니다. (VS 초보자, VB6에서 온 것).

VB 프로젝트 설정은 컴파일시 빌드 만 True로 설정되어 있으므로 변경된 코드를 실행하고 있다고 생각했지만 실제로는 그렇지 않았습니다.

그래서 내가 변경하고 프로젝트를 실행 한 후 깨끗하게 프로젝트를 수행 ... 내 이벤트 빌드 작업이 시작되었습니다.

어쨌든 고마워! Philip