tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。