【VB.NET】DataGridViewにコンテキストメニューを表示する

画面イメージ

注意点

  • コンテキストメニューは右クリック時に発生する
  • コンテキストメニューは右クリック時に発生するため、CellClickイベントでは発火しない
  • CellMouseDownに右クリックの条件を追加することでも発火するが、
    コンテキストメニューを提供することに特化したイベント(CellContextMenuStripNeeded)を
    使う方が意図が明確になる

セル選択時にコンテキストメニューを表示する

VB
    Private Sub DataGridView1_CellContextMenuStripNeeded(sender As Object, e As DataGridViewCellContextMenuStripNeededEventArgs) Handles DataGridView1.CellContextMenuStripNeeded

        'ヘッダの場合、スキップ
        If e.RowIndex < 0 Then Return
        If e.ColumnIndex < 0 Then Return

        '選択セルにコンテキストメニューを設定
        Dim menu As New ContextMenuStrip()
        menu.Items.Add("出社")
        menu.Items.Add("在宅")
        menu.Items.Add("休暇")
        e.ContextMenuStrip = menu

    End Sub

動作確認用コード

VB
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim dt As New DataTable
        With dt
            .Columns.Add("月曜日", GetType(String))
            .Columns.Add("火曜日", GetType(String))
            .Columns.Add("水曜日", GetType(String))
            .Columns.Add("木曜日", GetType(String))
            .Columns.Add("金曜日", GetType(String))
            .Rows.Add("")
            .Rows.Add("")
            .Rows.Add("")
            .Rows.Add("")
            .Rows.Add("")
        End With

        With DataGridView1
            .DataSource = dt
            .AllowUserToAddRows = False
        End With

    End Sub

コメント

タイトルとURLをコピーしました