【C#.NET】TreeViewをスクロールバーを使用せずスクロールさせる方法
関連記事
- 【#CSHARP】次の案件のスケルトン書いてgitサーバに登録するなどと 【2023年05月16日(火)】
- 生成AI「仕事で利用」2割 正確性などに懸念(23/5/7) 【2023年05月07日(日)】
- 【#RaspberryPI】ラズパイでsudo起動の.Net6アプリがデバグできない件 【2023年04月22日(土)】
- 【#PostgreSQL】テーブルから取得したレコードセットをCSVへ落とそうとすると,空ファイルが出来る...ドロドロドロ 【2023年03月08日(水)】
- 【#git】TortiseGit ver2.14のGitWCRev.exeを動かすとErrorCD:10を出力して,動かない 【2023年02月08日(水)】
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();
[/csharp]
この例だと,マウス左クリックを,スクロールバーにて5回押したことになります
スクロールの移動量は,ループのカウントを適時いじっていただければ...
とりあえず,これで,欲しい機能が実現できたということで
コメント
高速道路、有料2115年まで 半永久化へ改正法成立
【#梅雨】西日本各地が梅雨入り(23/5/29)
ガソリン補助金、9月末終了 6月から段階的に圧縮―経産省
Intel、64ビット専用アーキテクチャ「x86S」のビジョンを公開
はしか、国内で複数の感染者確認 同じ新幹線車両に乗り合わせ
宮崎の高校で491人がインフルエンザ集団感染15日から休校(23/5/18)
【#ウクライナ戦争】「ワグネル」トップ、ウクライナに露軍位置情報の提供提案 米紙報道