2

[VB 2010 / Winforms を使用]

複数の列を持つ DataGridView があります。それはバインドされておらず、どのようなデータベースにも接続されていません。ユーザー入力に基づいてセルごとに入力しているだけです。

とにかく、DGV の列の 1 つは「イメージ」型 (DataGridViewImageColumn) です。

私がやろうとしているのは、画像セルの1つがクリックされるたびに、画像セルがクリックされた正確な場所にコンテキストメニューストリップが表示されることです.

これが私がこれまでに持っているものです...

Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick

        Dim columnName As String = DataGridView1.Columns(e.ColumnIndex).Name
        If columnName = "Image" Then 
         Me.Status_ContextMenuStrip1.Show(Me.DataGridView1.CurrentCell.ContentBounds.Location) ' <-- This isn't right, but I must be close!
        End If

End Sub

上記のコードを実行して画像セルをクリックすると、コンテキスト メニューが表示されますが、画面の左上隅に表示されます。クリックしたセルがある正確な位置に表示するにはどうすればよいですか? 実際には、クリックしたセルのすぐ下に表示して、コンボボックスの「ドロップダウン」と同様の視覚効果を持たせたいと思います(方法がわかり次第、X座標とY座標をオフセットする方法を知っています)必要な場所の一般的な近くで取得します)。

ありがとう!

4

3 に答える 3

7

次のコードを試してください

Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    Dim columnName As String = DataGridView1.Columns(e.ColumnIndex).Name

    If columnName = "Image" Then
        Dim RowHeight1 As Integer = DataGridView1.Rows(e.RowIndex).Height
        Dim CellRectangle1 As Rectangle = DataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, False)

        CellRectangle1.X += DataGridView1.Left
        CellRectangle1.Y += DataGridView1.Top + RowHeight1

        Dim DisplayPoint1 As Point = PointToScreen(New Point(CellRectangle1.X, CellRectangle1.Y))

        ContextMenuStrip1.Show(DisplayPoint1)
    End If
End Sub
于 2013-07-09T22:01:49.103 に答える
0

このようにコードを変更してみてください..

Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick

    Dim columnName As String = DataGridView1.Columns(e.ColumnIndex).Name
    If columnName = "Image" Then 
       DataGridView1.CurrentCell = dgvDataDaftar.Rows(e.RowIndex).Cells(e.ColumnIndex)
       Me.Status_ContextMenuStrip1.Show(dgvDataDaftar, DataGridView1.PointToClient(Windows.Forms.Cursor.Position))
    End If

End Sub
于 2013-07-10T02:43:30.603 に答える