【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回押したことになります
スクロールの移動量は,ループのカウントを適時いじっていただければ...
とりあえず,これで,欲しい機能が実現できたということで
コメント
電子レンジが不調になったヤバス
【#地震】霧島山で有感地震 生駒高原のあたりか?(24/9/6)
奄美大島のマングース 環境省が根絶宣言
生ぬるい西風が吹いてるのぉ.大陸気団の南下はまだかっ!
【#台風】台風10号:台風に関する特別警報 発令予告が出た!鹿児島,宮崎(24/8/28)
【#台風】#台風10号:屋久島に線状降水帯が発生(24/8/28)
【#台風】養生テープ貼った(2年ぶり3回め)柿ピーも買ってきた!
今日も体調が悪いの.暑くないのに汗が酷い