【C#.NET】TreeViewをスクロールバーを使用せずスクロールさせる方法
関連記事
- なんと!今週の土曜日も仕事してますた.来週の土曜日も仕事臭い.TCPソケット通信をゴリゴリ書いてる 【2025年08月30日(土)】
- 【ChatGPT o4】祝日なのに仕事ーバテすぎー今夜こそ絶命だーモルモルモル 【2025年03月20日(木)】
- 【#CSharp】制御系が動き出したべ 【2025年02月20日(木)】
- 【#CSharp】ひっさしぶりにガッツリなC#案件をやっているぞー 【2025年02月19日(水)】
- 今週もひたすらモノ書き #JAVA 祭りがまだまだ続く そろそろC#を書かせろー 【2024年12月04日(水)】
NetFrameworkのTreeViewコンポーネントのツリーを
スクロールバーを操作することなく,スクロールさせてくれ!
なる件,実現してくれ,と依頼されて
スクロールバーの変わりに,2つのボタンのクリックイベントを使って,スクロールさせたいとのこと
なんか,プロパティ持ってんじゃね?
と探してみたけど,無かったり
んじゃぁ~,スクロールバーのHWnd捕まえて,
どげんかできるかな?などと探してみたけど,
この手の組み込みコンポーネントに引っ付いたスクロールバーのHWnd,捕まえられないみたい...
あれこれ,考えた結果
TreeViewコンポーネント自身に,メッセージ投げつければ,ひょっとしたら実現できるんじゃね?
に行き着いて
そしたら,うまく行ったんで,ここに書いておきますです
using System.Runtime.InteropServices; //InteropServicesをusingしてくださいませ #region Win32APIのSendMessage()を使って,コンポーネントに対しメッセージを直接投げつけます [DllImport("user32.dll",CharSet=CharSet.Unicode)] public static extern Int32 SendMessage(IntPtr hWnd, Int32 Msg, int wParam, int lParam); #endregion //メッセージ関係の定数を定義 private const int WM_VSCROLL = 0x115; //WM_VSCROLLメッセージを使用します private const int SB_LINEUP = 0; //上矢印を押した private const int SB_LINEDOWN = 1; //下矢印を押した private const int SB_PAGEUP = 2; //上ページアップを押した private const int SB_PAGEDOWN = 3; //下ページアップを押した //実際のコード ツリーのデータは降順で並んでます(下のほうが最新データと思っていただければ) m_TreeView.BeginUpdate(); //BeginUpdate(),EndUpdate()を入れたほうがちらつかないかも if (upScrFL == true) //アップ方向(下方向スクロール時)フラグが立っているとき { for(int i = 0; i < 5; i++) { SendMessage(m_TreeView.Handle, WM_VSCROLL, SB_LINEDOWN, 0); } } else { for(int i = 0; i < 5; i++) { SendMessage(m_TreeView.Handle, WM_VSCROLL, SB_LINEUP, 0); } } m_TreeView.EndUpdate();この例だと,マウス左クリックを,スクロールバーにて5回押したことになります
スクロールの移動量は,ループのカウントを適時いじっていただければ...
とりあえず,これで,欲しい機能が実現できたということで

コメント
【大地震】カムチャツカ半島沖合で地震 マグニチュード7.5と推定(25/9/13)
台風一過なのに今日も猛暑予想.秋が来ないぞい
【霧島山】新燃岳が噴火 噴煙高度火口上5500m(25/8/28)
日産「GT-R」生産終了 スポーツカーの開発環境 厳しさ増す
火球か?隕石か?「夜なのに明るく」「カメラが真っ白になるほどの光」九州や西日本各地で目撃あいつぐ 空気の振動も観測
ひょっとして,大規模にやらかしてました?ぎんゆぅ~さん,落ちてた模様(爆