0

datagridview的mousedown事件我已經寫在VS.NET的Visual Basic在Visual Studio中的應用程序2005.NET Windows窗體不觸發

它具有Windows窗體,具有DataGridView控制它來顯示從檢索到的數據數據庫。

我想允許用戶右鍵單擊某個記錄,查看上下文菜單,並且可以單擊刪除從數據庫中刪除該記錄。

不幸的是我甚至不能按下鼠標或點擊事件火災(在調試模式下,設置斷點)

這裏是我的代碼:

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 

正如你所看到的,我我試圖獲得一些事件,任何事件觸發,並且當我右鍵單擊或甚至左鍵單擊時,沒有任何代碼正在運行。

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窗體稱爲MDI子)相關? – 2013-02-25 16:04:10

+0

啊,你應該在第一盤中提到這一點。如果「處理」不在事件調用的位置,我注意到有相同的問題。我建議刪除所有的事件,並嘗試從Child表單GUI事件添加器添加事件cellmousedown。然後在事件後鍵入「Handles」,查看intellisense帶來的選擇。我選擇了DataGridView1.CellMouseDown。然後事件似乎正常開火。 – Patratacus 2013-02-25 16:32:34

+0

另外,你是否設置子窗體使用主窗體作爲父窗體?像這樣的父母形式: FormChild.MdiParent = Me – Patratacus 2013-02-25 16:37:55

0

非常抱歉,我的啞巴(VS初學者,來自VB6)。

事實證明,VB項目設置只有在編譯發佈版本設置爲True時,所以儘管我認爲我正在運行我更改的代碼,但我並不是!

因此,我改變了這一點後,運行項目...清潔,然後項目...建立我的事件開始工作。

無論如何,謝謝! 菲利普