• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コンボボックスのマウスホイールを無効にしたい)

コンボボックスのマウスホイールを無効にしたい

このQ&Aのポイント
  • DataGridView内のコンボボックスにカーソルがある場合、コンボボックス内のデータが変わってしまう問題について、マウスのホイールボタンを無効にする方法を教えてください。
  • ユーザー側からの要望で、コンボボックスにカーソルがある時に、マウスのホイールボタンを無効にする方法を探しています。しかし、自分で調べてもわからないため、教えていただきたいです。
  • サンプルソースには、DataGridView内にコンボボックスを設定する処理が含まれていますが、コンボボックス内のデータが正しく表示されない問題があります。そのため、コンボボックスにカーソルがある時に、マウスのホイールボタンを無効化したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.2

#1です。 その後調べてみたのですが、WndProcをオーバーライドしてマウスホイールメッセージを無効化する方法をやろうとしてみたのですが、適切なクラスが私には分からなかったので別の方法を考えました。 DataGridViewComboBoxが編集状態にあるときにMouseWheelイベントを感知した場合には編集を終了する。という方法を試してみました。 うまくいきそうでしたので下記のコードを参考にしてみてください。 --------------- Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim column1 As New DataGridViewComboBoxColumn() With DataGridView1 .Columns.Clear() .Columns.Add("Col01", "列1") With column1 .Items.AddRange(New String() {"Item01", "Item02", "Item03"}) .Name = "Col02" .HeaderText = "列2" End With .Columns.Add(column1) For i As Integer = 0 To 100 .Rows.Add() Next i End With End Sub Private dataGridViewComboBox As DataGridViewComboBoxEditingControl = Nothing Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit If Not (Me.dataGridViewComboBox Is Nothing) Then RemoveHandler Me.dataGridViewComboBox.MouseWheel, _ AddressOf dataGridViewComboBox_MouseWheel Me.dataGridViewComboBox = Nothing End If End Sub Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing If TypeOf e.Control Is DataGridViewComboBoxEditingControl Then Dim dgv As DataGridView = CType(sender, DataGridView) If dgv.CurrentCell.OwningColumn.Name = "Col02" Then Me.dataGridViewComboBox = _ CType(e.Control, DataGridViewComboBoxEditingControl) AddHandler Me.dataGridViewComboBox.MouseWheel, _ AddressOf dataGridViewComboBox_MouseWheel End If End If End Sub Private Sub dataGridViewComboBox_MouseWheel(ByVal sender As Object, _ ByVal e As EventArgs) Me.DataGridView1.EndEdit() End Sub End Class

ghost305jp
質問者

お礼

ありがとうございます。 いま、試してみたらうまくいきました。 ありがとうございました。

その他の回答 (1)

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.1

直接の回答ではないのですが、下記の記事&議論が参考になるのではないでしょうか。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46822&forum=7 http://www.atmarkit.co.jp/fdotnet/dotnettips/467wndproc/wndproc.html キーワードは「承継クラス」、「WndProcをオーバーライド」、「WM_MOUSEWHEEL」です。 詳しくは分かりかねますが、Datagridviewcomboboxcell?クラスの承継クラスを作って、WindProcをオーバーライド、そこでWM_MOUSEWHEELメッセージをはじくようにする。というような流れだと思います。

関連するQ&A

専門家に質問してみよう