TreeViewのスクロールについて

タグの編集
投稿者 刈谷勇  (社会人) 投稿日時 2009/1/10 00:48:47

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

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

どなたか、お知恵をお貸しください。
投稿者   (社会人) 投稿日時 2009/1/10 22:11:04
試してみたけどそんなことはないなあ。
逆はどう?


あとスクロールさせる時点のマウスポインタの位置とかも関係するのかな。
どうなんだろう?
投稿者 どくろべえ  (学生) 投稿日時 2009/1/10 22:17:28
実はハイライトされてるだけで、フォーカスが当たってないとか?
投稿者 刈谷勇  (社会人) 投稿日時 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/11 01:27:36
原因がわかりました。
ELECOMのホイールマウスを使っているのですが、どうもそのドライバーが悪さをしていたようです。
(投稿後の調査中にMouseWheelイベントをトラップしないとかMouseMoveのe.Deltaが0のままとか怪しい動きをしているのでおかしいなと思っていたのですが・・・)
ELECOMのドライバーを削除し、標準のドライバーにしたら直りました。

nさん、どくろべえさん、こんなくだらない質問につき合わせてしまって申し訳ありませんでした。