【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回押したことになりますスクロールの移動量は,ループのカウントを適時いじっていただければ...
とりあえず,これで,欲しい機能が実現できたということで

コメント
【#特別重大報道】存立危機事態オワタ:オヤジが亡くなったので諸々の行事を片してきたのぢゃ
【#特別重大報道】存立危機事態キター!有事発生ぢゃ!!なので,ぎんゆぅ~さんはしばらくお休みしまする
21年ぶりに新規航路 宮崎港に東京港と結ぶ貨物専用の定期航路開設へ
【#クマ】「泳ぐ宝石」ニシキゴイ、クマに襲われる…新潟県小千谷市のいけす
【クマ】クマによる人的被害、生活圏7割 環境省まとめ、出没は最多2万件
「ニュウハクシミ」紙を食べる害虫 生息19都道府県に拡大
文化の日な祭日らしい.文化的に休むもうず?
【#HTVX】新型宇宙輸送船HTV-X 油井さんがロボットアームでキャッチ