【C#.NET】TreeViewをスクロールバーを使用せずスクロールさせる方法
関連記事
- 今週もひたすらモノ書き #JAVA 祭りがまだまだ続く そろそろC#を書かせろー 【2024年12月04日(水)】
- 【#CSHARP】ソリューション内でサービス,Winformアプリを混在で作成させ,バイナリ出力先を同じにするとサービスが起動しない 【2024年02月08日(木)】
- 【#PHP】謎な #Laravel 案件 引き渡したじ 【2024年01月11日(木)】
- 【C#】謎な改造アプリ,SIMD命令を導入して高速化しようか,思案中 【2023年11月14日(火)】
- Javaの”やらかし”でC#と人気逆転か 激変プログラミング言語人気ランキング 【2023年10月18日(水)】
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回押したことになります
スクロールの移動量は,ループのカウントを適時いじっていただければ...
とりあえず,これで,欲しい機能が実現できたということで
コメント
【#大相撲】 横綱 照ノ富士 引退の意向を固める
【#日向灘地震】割れ残り部が依然健在じゃし.怖いわなぁ
【#大地震】宮崎に大地震キタ━(゚∀゚)━!!(25/1/13)
【#大雪】宮崎市に降雪予報キター(25/1/11)
【#2025】あけおめ~ 2025年が始まったらしい...ドロドロドロ
2024年が終わりますなぁ 1年ありがとうございました
ついに宮崎市も氷点下気温キター(24/12/23)