スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C#でオブジェクトを再帰的にダンプする

  • 2016/02/24 02:11
  • Category: C#
個人的に使っていたダンプクラスを手直ししたので、ついでにGitHubに挙げておきました。
https://github.com/KkGh/DebugLib/blob/master/Dumper.cs
DebugLib.Dumperがそのクラスです。
リポジトリには他にもいくつかクラスが入ってますが、特に参照はしていないのでDumper.csだけで利用できます。

ダンプ用メソッドはDump()とDumpToString()の2つです。2つともobjectの拡張メソッドにしているので、instance.Dump()でコンソールへ出力、instance.DumpToString()でstringを返します。
クラスならプロパティを、コレクションなら各要素をリフレクションで再帰的に列挙します。
基本的なフォーマットは「プロパティ名 = 値 (値の型)」ですが、コレクションの要素を列挙する場合には「[インデックス] 値 (値の型)」となります。

サンプル


staticプロパティでインデントサイズや型の表示・非表示などを設定できます。
DateTimeのように、そのままダンプするとやたら長い結果を吐くクラスもあるので、TypesAsStringに型を追加すれば再帰せずToString()の結果だけを出力できるようにしました。


モノによってはかなり冗長な出力になりますが、デバッグ用に作ったものということで…
それと今の処理ではコレクションが持つプロパティ(List<T>.Countなど)を表示できないので、今後色々と変更するかもしれません。
スポンサーサイト

WPFのListBoxをチルトホイールで横スクロールする

  • 2016/02/03 22:35
  • Category: WPF
WPFのListBoxは、マウスのチルトホイールを左右に傾けても横方向にスクロールしてくれません。
MouseWheel、PreviewMouseWheelイベントも回転にしか対応していないようで…


仕方ないので、まずはWndProcをフックして横スクロールイベントを検知します。
http://stackoverflow.com/questions/4158101/how-to-horizontally-scroll-in-wpf-using-mouse-tilt-wheel
チルトホイールを傾けたときのメッセージはWM_MOUSEHWHEEL(0x020E)、wParamの上位16ビット(wParam.ToInt32() >> 16)がスクロールした方向です。
左に倒すと-120、右に倒すと120になります。


次にListBoxをスクロールするために、ListBoxの子要素のScrollViewerを操作します。
ScrollViewer.LineLeftScrollViewer.LineRightで左右にスクロールできます。
傾け続けた場合の挙動は、スクロールバーの端にあるボタンを長押ししたときと同じ(?)ようです。


コード全体は以下のようになりました。前回と同じくBehaviorです。
カーソルがListbox内にあるときだけスクロールするように、MouseEnter、MouseLeaveでフラグ管理して制御してます。
53行目のVisualTreeHelpers.FindVisualChildはググればすぐに出てくる…と思います。



Pagination

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。