C# on Delphi

今回から C# on Delphi という名前でやっていきます。VS2003 ではありませんので、随所に異なる表現、名称が出てくる可能性があります。オレは VS2003 に触ったことが全くないので、違う部分があったとしても補足しませんので、適時読み替えて下さい。

Dock と Anchor

昨日の日記でちょっと触れましたが、Dock と Anchor を使ってウィンドウのリサイズに追随するレイアウトを行いたい時というのは良くあるなんてもんではないくらい使う方法ですね。んで、Delphi の Align プロパティと同じ挙動で動いてくれるようにならないかなぁといろいろいじっていたのですが、どうやら思った通りの挙動にならないのは C# のせいでも .NET のせいでも無いということが分かってきました。

以下のコードを見比べてみてください。フォームデザイナが生成するコードです。

//
// statusBar1
//
this.statusBar1.Location = new System.Drawing.Point(0, 279);
this.statusBar1.Name = "statusBar1";
this.statusBar1.Size = new System.Drawing.Size(300, 22);
this.statusBar1.TabIndex = 0;
this.statusBar1.Text = "statusBar1";
//
// richTextBox1
//
this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.richTextBox1.Location = new System.Drawing.Point(0, 0);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(300, 279);
this.richTextBox1.TabIndex = 1;
this.richTextBox1.Text = "richTextBox1";
//
// richTextBox1
//
this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.richTextBox1.Location = new System.Drawing.Point(0, 0);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(300, 301);
this.richTextBox1.TabIndex = 0;
this.richTextBox1.Text = "richTextBox1";
//
// statusBar1
//
this.statusBar1.Location = new System.Drawing.Point(0, 279);
this.statusBar1.Name = "statusBar1";
this.statusBar1.Size = new System.Drawing.Size(300, 22);
this.statusBar1.TabIndex = 1;
this.statusBar1.Text = "statusBar1";

コントロールを置く順番を変更しただけですが、数値が微妙に違います。おそらくこれが原因。思い通りの挙動じゃないのはバグか…。これが仕様というのはありえないと思うので。この部分の数値を決めてるのは多分 BDS (Borland Developer Studio ようするに IDE です)ですよね。

だれも Delphi2005 使って C# .NET でアプリ作ってないんだろうなぁ。テストも不十分なんだろうなぁ。QC にあげるべきか?もうあがってるとは思うんですけど。

追記

書き忘れてましたが Update3 までちゃんと当ててます。でも駄目、と。Update って本当に良くなってんのかいな。無効にしてたはずの Error Insight が有効になってたりして、いろいろきな臭い感じなんですが…。つか、設定まで元に戻すなよー!(ちょいとご立腹) 開発環境なんてこんなモンなんでしょうか。本当に?

デバッグ用出力

C#デバッグ情報を出力する方法。

System.Diagnostics.Debug.WriteLine(tabControl1);

出力例

デバッグ出力: level 0, msg="System.Windows.Forms.TabControl, TabPages.Count: 5, TabPages[0]: TabPage: {辟。鬘・}
", switch="" プロセス CS_TEST01.exe (10588)

これを使えば、リリース時には何も表示されないので便利です!でも TabPage: の後が化けてるのは誰のバグでしょう?^^; (まぁ Borland でしょうけど)
Windows のウィンドウアプリケーションは標準出力を持たないので、こういう方法で無いと情報を表示出来ないといった方が正解でしょうか。イヤ、便利なので文句は全く無いですが。