0

我有一个在 Visual Studio 2005 上用 VS.NET Visual Basic 编写的应用程序。

它有一个 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

如您所见,我正在尝试获取一些事件,任何要触发的事件,当我右键单击甚至左键单击时,没有任何代码正在运行。

顺便说一句,运行时网格中有数据,据我所知,它已启用

那么我在这里做错了什么?我需要向DataGridView控件添加一些功能吗?

4

2 回答 2

1

我正在使用您的代码,当单击填充的 datagridview 中某处的单元格时,CellMouseDown 工作。我在设计时手动填充了数据。在运行时模式下我没有尝试过。

即使没有填充,您也可以获得空的 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

[编辑 2/25/2013]

我尝试使用以下代码将数据动态添加到 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 的空项目并尝试看看您的问题可能出现在哪里?

于 2013-02-25T15:48:38.180 回答
0

非常抱歉我的愚蠢(VS 的初学者,来自 VB6)。

事实证明,VB 项目设置将 Build only on Compile for release 设置为 True,所以即使我认为我正在运行更改后的代码,但我没有!

所以在我改变它并运行 Project...Clean 然后是 Project... Build 我的事件开始工作。

不管怎么说,还是要谢谢你!菲利普

于 2013-02-26T15:12:09.913 回答