DOBON.NETプログラミング道掲示板

■35351 / 2階層)  TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい
□投稿者/ 魔界の仮面弁士 大御所(1526回)-(2023/01/25(Wed) 20:54:52)
  • アイコンNo35350に追記(魔界の仮面弁士の記事)
    > サンプルを書いてみました。
    > https://gist.github.com/Benshi/0042cb7b23ca310181bff15c4c3a0042

    上記実装を追加検証してみましたが、まだまだ不具合がありますね。

    (1) スクロールバーを押しっぱなしにしていると、
     終端に到達した後も Scroll イベントが発生し続けます。

    (2) 折りたたまれたノードを選択した状態で、そのノードを
    上側のスクロール領域外にし、そこで[→]あるいは[Num *]を押して
    ノードを展開した場合に、スクロールされるのにイベントが通知されません。


    各種パターンに追従させるのも面倒ですね…。

    こうなると、TopNode を Timer 監視した方が手っ取り早そうです。
    垂直スクロールしか検出できないですけれどね。

    Public Class Form1
      Public Event TreeViewScroll As EventHandler

      Private Sub Form1_TreeViewScroll(sender As Object, e As EventArgs) Handles Me.TreeViewScroll
        'ListBox1.Items.Insert(0, "Scrolled at " & Now.ToString("HH:mm:ss.fff"))
      End Sub

      Private topNode As TreeNode = Nothing
      Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        If TreeView1.TopNode IsNot Nothing Then
          If topNode IsNot TreeView1.TopNode Then
            topNode = TreeView1.TopNode
            RaiseEvent TreeViewScroll(TreeView1, EventArgs.Empty)
          End If
        End If
      End Sub
      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Timer1.Interval = 150
        Timer1.Start()
      End Sub
    End Class


    あるいは、無理にスクロールを同期させようとするのではなく、
    No35346 の TreeGridView のように、最初から
    「ツリー表示対応のグリッドコントロール」を用いるとか。


    なお、先に例示したものとは別実装のツリー対応グリッドを探したところ、
    Eto.Forms の TreeGridView というのが見つかりました。
    https://github.com/picoe/Eto
    https://www.nuget.org/packages/Eto.Forms
    https://mokake.hatenablog.com/entry/2017/01/31/184421

    ただし Eto.Forms は、.NET Framework 3.5 には対応していないようです。
    一応 バージョン 2.3.0 以下であれば、.NET Framework 4 対応らしいので、
    ギリギリ VB2010 でも動かせるかもしれませんが…。(未確認)
違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[1]: TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい /魔界の仮面弁士 →Re[3]: TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい /炎の妖精さん
→Re[3]: TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい /炎の妖精さん
 
上記関連ツリー

Nomalアイコン TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい / 炎の妖精さん (23/01/25(Wed) 13:50) #35349
Nomalアイコン Re[1]: TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい / 魔界の仮面弁士 (23/01/25(Wed) 17:59) #35350
  └Nomalアイコン TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい / 魔界の仮面弁士 (23/01/25(Wed) 20:54) #35351 ←Now
    ├Nomalアイコン Re[3]: TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい / 炎の妖精さん (23/01/26(Thu) 13:57) #35353 解決み!
    └Nomalアイコン Re[3]: TreeViewとDataGridViewのスクロールを同期(シンクロ)させたい / 炎の妖精さん (23/01/26(Thu) 10:37) #35352 解決み!

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -