ツール
デバッグウィンドウへの出力
デバッグ時に何かのデータダンプを表示させたい場合、コンソールアプリケーションなら
簡単に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
- 既存のファイルと同じファイル名には変更できない(例外が起きる)。
- ファイル名の最後に「.」(ピリオド)のみを付けると拡張子がなくなる。