0

Visual Studio 2005 の VS.NET Visual Basic で記述されたアプリケーションがあります。

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

ご覧のとおり、何らかのイベントを発生させようとしていますが、右クリックまたは左クリックしてもコードが実行されません。

ところで、実行時にグリッドにデータがあり、私が知る限り、それは有効になっています

それで、私はここで何が間違っていますか?DataGridViewコントロールに追加する必要がある機能はありますか?

4

2 に答える 2

1

私はあなたのコードで遊んでいましたが、入力されたデータグリッドビューのどこかのセルをクリックすると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

[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だけで空のプロジェクトを試して、問題が発生した可能性のある場所を確認することができますか?

于 2013-02-25T15:48:38.180 に答える
0

私の愚かさについて非常に申し訳ありません(VB6から来たVSの初心者)。

VB プロジェクトの設定で、[リリース用にコンパイルする場合のみビルド] が [True] に設定されていることがわかりました。

だから私はそれを変更し、Project...Cleanに続いてProject...Buildを実行した後、私のイベントが機能し始めました。

とにかくありがとう!フィリップ

于 2013-02-26T15:12:09.913 に答える