DataGridView内にコンボボックスを設定しております。
マウスのホイールボタンは、DataGridViewの縦スクロールに
使いたいのですが、DataGridView内のコンボボックスに
カーソルがある場合、コンボボックス内のデータが変わってしまいます。
ユーザー側と打ち合わせた結果、コンボボックスにカーソルが
ある時に、マウスのホイールボタンを無効に出来ないかと
言われております。
色々調べてみましたが、私では分からず、教えて下さい。
(サンプルソース)
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
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
No.1
- 回答日時:
直接の回答ではないのですが、下記の記事&議論が参考になるのではないでしょうか。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
http://www.atmarkit.co.jp/fdotnet/dotnettips/467 …
キーワードは「承継クラス」、「WndProcをオーバーライド」、「WM_MOUSEWHEEL」です。
詳しくは分かりかねますが、Datagridviewcomboboxcell?クラスの承継クラスを作って、WindProcをオーバーライド、そこでWM_MOUSEWHEELメッセージをはじくようにする。というような流れだと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) エクセルVBAで以下のようなコードを書いたらエラーになりました。何処が間違っているの教えて? 1 2023/02/10 18:30
- Visual Basic(VBA) ExcelVBAで、型が一致しませんのエラーについて 3 2023/06/20 09:51
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
ExcelのComboboxでマウスのスクロールを有効にしたい
Excel(エクセル)
-
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
-
4
CloseとDisposeの違い
Visual Basic(VBA)
-
5
文字列の後ろから必要分だけ削除したい。
Visual Basic(VBA)
-
6
VB.NET2005 TextBox 高さ(Height) 変更
Visual Basic(VBA)
-
7
有無、要否、賛否、是非、可否、当否…これらの言葉について
その他(教育・科学・学問)
-
8
Enabled=Falseのテキストボックスの文字の色
Visual Basic(VBA)
-
9
Select Case文でこのようなことは可能でしょうか?
Visual Basic(VBA)
-
10
テキストボックスかラベル上の表示を縦に中央揃えしたい
Visual Basic(VBA)
-
11
コンボボックスのドロップダウンリストの設定
Excel(エクセル)
-
12
VB.NET DataGridView 縦スクロールバーを常に表示
Visual Basic(VBA)
-
13
チェックボックスを操作できないようにしたいです VB.NET
Visual Basic(VBA)
-
14
ひとつのファイルにクラスは1つ?
Java
-
15
Loadイベント中にほかのイベントを発生したくない
その他(プログラミング・Web制作)
-
16
VBAのリストボックスをマウスでスクロール
PowerPoint(パワーポイント)
-
17
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
18
[VB.net] DataGridViewのコンボボックス:部分一致等の機能追加
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
java eclipse 型に解決できません
-
どこからも呼ばれていない無意...
-
グローバルIPとプライベートIP...
-
「天声人語」をインターネット...
-
容姿について
-
配列の重複する値とその個数を...
-
自作のクラスファイルがインポ...
-
ポータブル電源を買おうと思う...
-
1 つのヘッダファイルに複数の...
-
ドキュメントクラスの取得方法
-
string formatについて
-
同じパッケージ、クラス名が含...
-
C#で OpenSSLで3DES
-
正規表現を使った小数入力チェ...
-
クラスのプロパティに構造体を...
-
同一パッケージにあるクラスが...
-
Javaでの構造体の構造体のクラ...
-
標準モジュールとクラスモジュ...
-
VBAもしくはVB6:クラスの中で...
-
ネスカフェ エクセラ と UCCク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
「天声人語」をインターネット...
-
オブジェクト指向プログラミン...
-
同一パッケージにあるクラスが...
-
SQLです教えてくださいお願いし...
-
自作のクラスファイルがインポ...
-
packageとimport の違いって?
-
重複エラーを解決するには
-
1 つのヘッダファイルに複数の...
-
UMLのクラス図はmain()も含むん...
-
main()を持つクラスが2つ以上...
-
3年間同じクラスになる確率
-
河合塾のクラス分けについて
-
EclipseでJSPのコンパイルエラー
-
どこからも呼ばれていない無意...
-
IPアドレスの3バイト目の呼び方
-
同じクラスにならない確率を教...
-
IPアドレスのクラスAを取得して...
おすすめ情報