.NET Framework チップス

Last-modified: 2006-11-27 (月) 16:15:40

ツール

デバッグウィンドウへの出力

デバッグ時に何かのデータダンプを表示させたい場合、コンソールアプリケーションなら
簡単にConsole.Writeで出力可能ですが、フォームアプリケーションの場合、そうもいきません。
そこで、.NET Frameworkでは、以下のようなデバッグ専用の関数が用意されています。

System.Diagnostics.Debug.Write()
System.Diagnostics.Debug.WriteLine()

ソースファイルごとにデバッグ出力をなくす。

デバッグ出力は便利な物ですが、書きすぎると意味がわからなくなってきます。
そこでデバッグ出力を一時的に抑えるための手段を考えました。
以下のマクロを定義してやれば、WriteLine()は出力されなくなります。

#define WriteLine(X) WriteIf(false,S"")

見てわかるとおり、Managed C++, C++/CLI専用ですvv。

MessageBoxのOwner

たとえば、単にMessageBox.Show()ってやったんじゃ、そのメッセージボックスを出したウィンドウにフォーカスを移すことができてしまう。つまり、ユーザーに見て欲しいエラーや情報が見てもらえない危険性がある。そこで、MessageBox.Show()をやる場合には、そのメッセージが重要であるというのなら、その第1引数にthisを渡そう。そうすることで、表示するメッセージボックスが閉じられない限り、親ウィンドウに遷移できなくなる。

MessageBox::Show(this, S"致命的なエラーです", S"favore tool");

第一引数は、System.Windows.Forms.IWin32Windowインタフェースになっている。
System.Windows.Forms.Formを継承しているクラスのthisを渡せばいい。

Explorerで表示されるバージョン情報埋め込み。

単にリソースファイルを追加し、そこにバージョン情報を埋めればいい。
が、これではバージョン更新が二度手間になってしまう。
ま、その辺は適宜修正する。

ListViewを自動スクロール。

あるアイテムがビューから隠れてしまうのを防ぐため、EnsureVisible()を使う。←書き直し。

ShowDialog()で表示されたFormは、Close()されてもDispose()されない。

RichTextBoxの改行文字コード

書式設定がある場合
LF('\n')
書式設定がない場合
システム依存(Win:CR+LF('\r\n'),Mac:CR('\r'),Linux:LF('\n'))

というわけで、クリップボードからメモ帳なんかへコピーする際には注意が必要。

System::String * temp = this->richTextBox1->Text;
temp = temp->Replace("\n", System::Environment::NewLine);
System::Windows::Forms::Clipboard::SetDataObject(temp);

System::IO::File::Move

  • 既存のファイルと同じファイル名には変更できない(例外が起きる)。
  • ファイル名の最後に「.」(ピリオド)のみを付けると拡張子がなくなる。