TreeViewのスクロールについて への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 刈谷勇  (社会人) 投稿日時 2009/1/11 01:27:36
原因がわかりました。
ELECOMのホイールマウスを使っているのですが、どうもそのドライバーが悪さをしていたようです。
(投稿後の調査中にMouseWheelイベントをトラップしないとかMouseMoveのe.Deltaが0のままとか怪しい動きをしているのでおかしいなと思っていたのですが・・・)
ELECOMのドライバーを削除し、標準のドライバーにしたら直りました。

nさん、どくろべえさん、こんなくだらない質問につき合わせてしまって申し訳ありませんでした。
投稿者 刈谷勇  (社会人) 投稿日時 2009/1/10 23:47:31
nさん、どくろべえさん回答ありがとうございます。

その後、調査した結果どうもDataGridViewのホイールの回転をキャプチャ(というのかな?)する優先順が低い為、TreeViewにとられてしまっているようです。
Form上にTreeView・DataGridView・ListBoxを配置して以下のコードを実行したところ、DataGridViewにフォーカスがあってもTreeViewやListBoxがスクロールしてしまいます。
みなさんの環境ではどうでしょうか?
なお、貼り付けた各コントロールはスクロールバーが出るような大きさにしてください。

    Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        TreeView1.Nodes.Add("node1")
        TreeView1.Nodes.Add("node2")
        TreeView1.Nodes.Add("node3")
        TreeView1.Nodes.Add("node4")
        TreeView1.Nodes.Add("node5")
        TreeView1.Nodes.Add("node6")
        TreeView1.Nodes.Add("node7")
        TreeView1.Nodes.Add("node8")
        TreeView1.Nodes.Add("node9")
        TreeView1.Nodes.Add("node10")

        DataGridView1.Columns.Add("a""a")
        DataGridView1.Columns.Add("b""b")
        DataGridView1.Columns.Add("c""c")
        DataGridView1.Columns.Add("d""d")
        DataGridView1.Columns.Add("e""e")
        DataGridView1.Columns.Add("f""f")
        DataGridView1.Columns.Add("g""g")
        DataGridView1.Columns.Add("h""h")
        DataGridView1.Columns.Add("i""i")

        DataGridView1.Rows.Add()
        DataGridView1.Rows.Add()
        DataGridView1.Rows.Add()
        DataGridView1.Rows.Add()
        DataGridView1.Rows.Add()
        DataGridView1.Rows.Add()
        DataGridView1.Rows.Add()
        DataGridView1.Rows.Add()
        DataGridView1.Rows.Add()
        DataGridView1.Rows.Add()

        ListBox1.Items.Add("a")
        ListBox1.Items.Add("b")
        ListBox1.Items.Add("c")
        ListBox1.Items.Add("d")
        ListBox1.Items.Add("e")
        ListBox1.Items.Add("f")
        ListBox1.Items.Add("g")
        ListBox1.Items.Add("h")
    End Sub


投稿者 どくろべえ  (学生) 投稿日時 2009/1/10 22:17:28
実はハイライトされてるだけで、フォーカスが当たってないとか?
投稿者   (社会人) 投稿日時 2009/1/10 22:11:04
試してみたけどそんなことはないなあ。
逆はどう?


あとスクロールさせる時点のマウスポインタの位置とかも関係するのかな。
どうなんだろう?
投稿者 刈谷勇  (社会人) 投稿日時 2009/1/10 00:48:47

現在、Form上にTreeViewとDataGridViewの2つを配置しています。
このとき、TreeViewにスクロールバーが表示されているとDataGridViewにフォーカスがあたっていてもホイールでのスクロールがTreeViewに奪われてしまうのですが、これは仕様なのでしょうか?
それとも、プロパティの設定等で変更できるのでしょうか?

現在は、EnterイベントでScrollableをTrueにLeaveイベントでScrollableをFalseに変えています。ただ、この方法だとスクロールバーを表示させるために再描画が走る為、TreeViewの中身が少しの間消えるので、なんだか見栄えが良くありません。(ScrollableをTrueする前にSuspendLayoutを使ったのですが、やはり中身が少しの間消えていました)

どなたか、お知恵をお貸しください。