【C#.NET】TreeViewをスクロールバーを使用せずスクロールさせる方法
関連記事
- 【#CSHARP】ソリューション内でサービス,Winformアプリを混在で作成させ,バイナリ出力先を同じにするとサービスが起動しない 【2024年02月08日(木)】
- 【#PHP】謎な #Laravel 案件 引き渡したじ 【2024年01月11日(木)】
- 【C#】謎な改造アプリ,SIMD命令を導入して高速化しようか,思案中 【2023年11月14日(火)】
- Javaの”やらかし”でC#と人気逆転か 激変プログラミング言語人気ランキング 【2023年10月18日(水)】
- 【#CSHARP】次の案件のスケルトン書いてgitサーバに登録するなどと 【2023年05月16日(火)】
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回押したことになります
スクロールの移動量は,ループのカウントを適時いじっていただければ...
とりあえず,これで,欲しい機能が実現できたということで
コメント
【地震】日向灘でM4.4の地震
【#第三次世界大戦】ウクライナ空軍 “ICBM1発がロシア南部から発射された”
司法省 “グーグルはクローム売却を” 裁判所に要求へ 米報道
最近,仕事がずっと激しい...ドロドロドロ
今日は謎の宴会らしい...スーツが入るのかっ!?(GRB爆
「侍ジャパン」宮崎県入り 「プレミア12」向け きょうから合宿
【#総選挙】 衆議院選挙 きょう投票 ...ドロドロドロ(24/10/27)
【#線状降水帯】宮崎 延岡「土砂崩れで家がつぶれている」通報 1人不明(24/10/23)
【冬】お~日本海に筋雲が出ちょる!冬がキター
【#寒冷前線】13時頃30℃の気温が今は25℃無いぞー