タイトル : Re^2: DataGridView上で右クリック 投稿日 : 2024/02/14(Wed) 14:12 投稿者 : 魔界の仮面弁士
>> 特定の列を選択している時に、右クリックをしたら選択状態は > 当方で下記のコードで試してみた限りでは、選択状態の解除は確認できませんでした。 「特定の列を選択」とあったので、選択モードを FullColumnSelect にしたり、 コンテキストメニューの割り当てを Columns(1) と Columns(2) に限定してみたりしましたが、 やはり選択解除されてしまう事象は再現できませんでした。 '選択モードを FullColumnSelect に変更 dgv2.AllowUserToAddRows = False dgv2.TopLeftHeaderCell.Value = "dgv2" dgv2.RowCount = 100 dgv2.ColumnCount = 10 For c = 0 To 9 dgv2.Columns(c).SortMode = DataGridViewColumnSortMode.Programmatic Next dgv2.SelectionMode = DataGridViewSelectionMode.FullColumnSelect 'コントロール全体ではなく、特定の列にだけ ContextMenuStrip をセットする 'dgv2.ContextMenuStrip = New ContextMenuStrip() '第2列、第3列にのみ、ContextMenuStrip を割り当て Dim ctx As ContextMenuStrip, menu As ToolStripItem ctx = New ContextMenuStrip() menu = ctx.Items.Add("Col2") dgv2.Columns(1).ContextMenuStrip = ctx AddHandler menu.Click, Sub() dgv2.Columns(1).HeaderText = Now.ToString("HH:mm:ss.fff") ctx = New ContextMenuStrip() menu = ctx.Items.Add("Col3") dgv2.Columns(2).ContextMenuStrip = ctx AddHandler menu.Click, Sub() dgv2.Columns(2).HeaderText = Now.ToString("HH:mm:ss.fff") '2列目を選択しておく dgv2.ClearSelection() dgv2.Columns(1).Selected = True >> 双方のDataGridViewの設定は見比べましたが同じでした。データベースの読み込み方も同じ流れでした。 >> なぜ2つのDataGridViewの右クリック時に挙動が違うのかがわかりません。 からしれんこんさんの現状のコードがどういう実装になっているのか、そして プロパティ設定がどうなっているのかが分からず、今のところ再現はできていません。 動作に差異のある 2 つの DataGridView に対して、 フォーカス遷移を伴う操作(メッセージボックスの表示も含む)が発生していないか、 バインドしているデータの再割り当てや更新作業などの違いが無いか、などを確認してみましょう。 もしかしたら DataGridView そのものではなく、DataSource にバインドしている BindingSource や DataSet などにイベント処理が含まれているという可能性も考えられます。 また、(ContextMenu ではなく)ContextMenuStrip を使っている場合には、 状況依存メニュー(現在のセルの状態や値によって表示するメニューを切り替える)に したい場合には、CellContextMenuStripNeeded イベントが使われることもあります。 https://dobon.net/vb/dotnet/datagridview/contextmenuestrip.html |