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

ツリー一括表示

Nomalアイコン TreeViewの現在位置とDataGridViewの現在位置を合わせたい /炎の妖精さん (23/01/24(Tue) 15:07) #35341 TREEVIEW_DATAGRIDVIEW.png/9KB
Nomalアイコン Re[1]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい /炎の妖精さん (23/01/24(Tue) 15:16) #35342
│└Nomalアイコン Re[2]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい /魔界の仮面弁士 (23/01/24(Tue) 16:21) #35343
│  └Nomalアイコン Re[3]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい /炎の妖精さん (23/01/24(Tue) 16:57) #35345
│    └Nomalアイコン Re[4]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい /魔界の仮面弁士 (23/01/24(Tue) 17:07) #35346
Nomalアイコン Re[1]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい /魔界の仮面弁士 (23/01/24(Tue) 16:51) #35344
  └Nomalアイコン Re[2]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい /炎の妖精さん (23/01/24(Tue) 17:09) #35347
    └Nomalアイコン Re[3]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい /炎の妖精さん (23/01/25(Wed) 13:43) #35348 解決み!


親記事 / ▼[ 35342 ] ▼[ 35344 ]
■35341 / 親階層)  TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 炎の妖精さん 一般人(19回)-(2023/01/24(Tue) 15:07:37)
  • アイコン環境/言語:[Win10(64bit)_VB.NET(Framework 3.5)_VS2010] 
    分類:[.NET] 

    お世話になります。
    本サイト様にはいつも助けられており感謝いたします!
    開発中に困った場面が出てまいりましたのでご助言いただければ幸いです!

    内容ですが、
    左側に"TreeView"、右側に"DataGridView"を表示させており、
    TreeViewの現在位置が変われば、DataGridViewの現在位置も変えたい所存です。

    TreeViewには行という概念が存在しない為、
    どのようにすればいいのか分からない次第です。
994×120 => 250×30
イメージ
TREEVIEW_DATAGRIDVIEW.png
/9KB
違反を報告
[ □ Tree ] 返信 削除キー/

▲[ 35341 ] / ▼[ 35343 ]
■35342 / 1階層)  Re[1]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 炎の妖精さん 一般人(20回)-(2023/01/24(Tue) 15:16:05)
  • アイコン補足ですが、以下のようなTree構造もあります。
    TreeViewには、@、A、@+Aを表示させるパターンがあります。
    以下の@、Aはあくまで一例です。

    ---------------------------------------------
    @A
     └B
      ├C
      ├D─E
      └F
    AG
     └H
      ├I┬J
      │ └K
      └L
    ---------------------------------------------
違反を報告
[ 親 35341 / □ Tree ] 返信 削除キー/

▲[ 35342 ] / ▼[ 35345 ]
■35343 / 2階層)  Re[2]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 魔界の仮面弁士 大御所(1522回)-(2023/01/24(Tue) 16:21:08)
  • アイコンNo35342に返信(炎の妖精さんさんの記事)
    > 補足ですが、以下のようなTree構造もあります。

    方向性が異なってきますが、この構成のために
      「ツリー表示可能な DataGridView」
    を使うという選択肢は如何でしょうか。
    https://www.vb-user.net/junk/replySamples/2023.01.24.16.19/TreeDataGridView.png

    ノードの折りたたみにも対応できるようです。
    オリジナルコード(C#)のダウンロードはこちら。
    https://www.windowsforms.net/blogs/markrideout/treegridview.zip


    元記事はこちら。
    [Mark Rideout's Blog] - [Customizing the DataGridView to support expanding/collapsing (ala TreeGridView)]
    https://learn.microsoft.com/en-us/archive/blogs/markrideout/customizing-the-datagridview-to-support-expandingcollapsing-ala-treegridview


    ※ツリーの展開と折りたたみに対応する必要があるため、
     DataSource プロパティや VirtualMode プロパティは無効化されています。
違反を報告
[ 親 35341 / □ Tree ] 返信 削除キー/

▲[ 35343 ] / ▼[ 35346 ]
■35345 / 3階層)  Re[3]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 炎の妖精さん 一般人(21回)-(2023/01/24(Tue) 16:57:34)
  • アイコン魔界の仮面弁士様
    回答ありがとうございます!

    > 方向性が異なってきますが、この構成のために
    >   「ツリー表示可能な DataGridView」
    > を使うという選択肢は如何でしょうか。
    「ツリー表示可能なDataGridView」が
    VS2010にも取り入れることが出来れば選択肢は有りです!


    > ノードの折りたたみにも対応できるようです。
    > オリジナルコード(C#)のダウンロードはこちら。
    サイトにアクセスしましたが、ページが見つかりませんとエラーが出ました。
    「Oops! That page can’t be found.」


    > 元記事はこちら。
    > [Mark Rideout's Blog] - [Customizing the DataGridView to support expanding/collapsing (ala TreeGridView)]
    此度のようなツリー表示可能なDataGridViewで表現したい場合は
    大変素晴らしいコントロールだと思いました。
    採用するかどうかは検討させていただきます。
違反を報告
[ 親 35341 / □ Tree ] 返信 削除キー/

▲[ 35345 ] / 返信無し
■35346 / 4階層)  Re[4]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 魔界の仮面弁士 大御所(1524回)-(2023/01/24(Tue) 17:07:25)
  • アイコン2023/01/24(Tue) 17:08:16 編集(投稿者)

    No35345に返信(炎の妖精さんさんの記事)
    > VS2010にも取り入れることが出来れば選択肢は有りです!
    Visual Studio 2005 向けの古いソースコードなので、
    移植性に関しては問題ないと思います。


    >>ノードの折りたたみにも対応できるようです。
    >>オリジナルコード(C#)のダウンロードはこちら。
    > サイトにアクセスしましたが、ページが見つかりませんとエラーが出ました。

    あぁ、失礼しました。
    >>元記事はこちら。
    からリンクされている記事を読んでいただくと、その冒頭に
    >>> Original Code:
    >>> https://www.windowsforms.net/blogs/markrideout/treegridview.zip
    とあります。この URL を踏むと、実際には
    下記(OneDrive) の移転先からダウンロードされる仕組みです。

    https://skydrive.live.com/redir?resid=3A5CA8204EC61147!47897&authkey=!AEyPC_P9956qy2E
違反を報告
[ 親 35341 / □ Tree ] 返信 削除キー/

▲[ 35341 ] / ▼[ 35347 ]
■35344 / 1階層)  Re[1]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 魔界の仮面弁士 大御所(1523回)-(2023/01/24(Tue) 16:51:42)
  • アイコンNo35341に返信(炎の妖精さんさんの記事)
    > 左側に"TreeView"、右側に"DataGridView"を表示させており、
    > TreeViewの現在位置が変われば、DataGridViewの現在位置も変えたい所存です。
    アイテムの高さの調整や、スクロールや折り畳みへの追従は
    すでに実装済みであり、あくまでも「現在行」の
    調整さえ行えれば良い、ということでしょうか。

    > TreeViewには行という概念が存在しない為、
    > どのようにすればいいのか分からない次第です。

    TreeNode.EnsureVisible メソッド … 指定ノードを表示させる(展開やスクロールも行われる)
    TreeNode.Bounds プロパティ … ノード位置を示す Recangle を取得する
    TreeView.SelectedNode … 現在選択されているノードを示す
    TreeView.TopNode プロパティ … 表示されている中で一番上のノードを取得・設定する
    TreeView.HitTest メソッド … 指定座標にある要素を調査する
    TreeView.BeforeSelect イベント … ノードが選択される直前に発生する(キャンセル可能)
    TreeView.AfterSelect イベント … ノードが選択された後で発生する
    TreeView.BeforeCollapse/BeforeExpand/AfterCollapse/AfterExpand イベント … ノードが折り畳み/展開される直前/直後にそれぞれ発生する
    TreeView.WndProc メソッド … オーバーライドして WM_VSCROLL/WM_HSCROLL を捉えることで、TreeView のスクロールを検知することができる

    DataGridView.FirstDisplayedScrollingRowIndex プロパティ … 指定行までスクロールさせる
    DataGridView.FirstDisplayedScrollingColumnIndex プロパティ … 指定列までスクロールさせる
    DataGridView.SelectedRows プロパティ … 現在選択されているプロパティを返す
    DataGridView.Scroll イベント … DataGridView のスクロールを検知することができる
    DataGridView.SelectionChanged イベント … 別のセル範囲が選択されると発生する
違反を報告
[ 親 35341 / □ Tree ] 返信 削除キー/

▲[ 35344 ] / ▼[ 35348 ]
■35347 / 2階層)  Re[2]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 炎の妖精さん 一般人(22回)-(2023/01/24(Tue) 17:09:14)
  • アイコン魔界の仮面弁士様
    回答ありがとうございます!

    >> 左側に"TreeView"、右側に"DataGridView"を表示させており、
    >> TreeViewの現在位置が変われば、DataGridViewの現在位置も変えたい所存です。
    > アイテムの高さの調整や、スクロールや折り畳みへの追従は
    > すでに実装済みであり、あくまでも「現在行」の
    > 調整さえ行えれば良い、ということでしょうか。
    実はスクロールについても悩んでおりまして・・・
    TreeViewとDataGridViewのスクロールは同期(シンクロ)させたいのですが、
    TreeViewにはScrollに関するイベント関数が用意されていないようでした。
    TreeViewをマウスホイールでスクロールするとDataGridViewも同方向にスクロールしたいです。
    ※TreeViewとDataGridViewに表示されるデータ件数は同じです


    > TreeNode.EnsureVisible メソッド … 指定ノードを表示させる(展開やスクロールも行われる)
    > TreeNode.Bounds プロパティ … ノード位置を示す Recangle を取得する
    > TreeView.SelectedNode … 現在選択されているノードを示す
    > TreeView.TopNode プロパティ … 表示されている中で一番上のノードを取得・設定する
    > TreeView.HitTest メソッド … 指定座標にある要素を調査する
    > TreeView.BeforeSelect イベント … ノードが選択される直前に発生する(キャンセル可能)
    > TreeView.AfterSelect イベント … ノードが選択された後で発生する
    > TreeView.BeforeCollapse/BeforeExpand/AfterCollapse/AfterExpand イベント … ノードが折り畳み/展開される直前/直後にそれぞれ発生する
    > TreeView.WndProc メソッド … オーバーライドして WM_VSCROLL/WM_HSCROLL を捉えることで、TreeView のスクロールを検知することができる

    > DataGridView.FirstDisplayedScrollingRowIndex プロパティ … 指定行までスクロールさせる
    > DataGridView.FirstDisplayedScrollingColumnIndex プロパティ … 指定列までスクロールさせる
    > DataGridView.SelectedRows プロパティ … 現在選択されているプロパティを返す
    > DataGridView.Scroll イベント … DataGridView のスクロールを検知することができる
    > DataGridView.SelectionChanged イベント … 別のセル範囲が選択されると発生する
    各コントロールのイベントの説明、ありがとうございます!
    やりたいこと、出来そうなことを整理して
    実装できるか検証したいと思います。
違反を報告
[ 親 35341 / □ Tree ] 返信 削除キー/

▲[ 35347 ] / 返信無し
■35348 / 3階層)  Re[3]: TreeViewの現在位置とDataGridViewの現在位置を合わせたい
□投稿者/ 炎の妖精さん 一般人(23回)-(2023/01/25(Wed) 13:43:18)
  • アイコン魔界の仮面弁士様

    なんとか現在位置を取得することが出来ました。

    スクロールの同期(シンクロ)については新たに質問します。
    ありがとうございました。
解決み!
違反を報告
[ 親 35341 / □ Tree ] 返信 削除キー/


Mode/  Pass/


- Child Tree -