Labelクラスの継承関係は次のようになっています。
System.Object System.MarshalByRefObject System.ComponentModel.Component System.Windows.Forms.Control System.Windows.Forms.Label必須のプロパティには、次のような物があります。
public override string Text { get; set; }これは、Control.Textをオーバーライドしています。
Textプロパティを設定すれば、わざわざPaintイベントを処理しなくてもラベル上にテキストを表示できます。Win32APIのスタティックコントロールに似ています。
この章のサンプルでは、テキストボックスのTextプロパティの値が変更されたときに発生するControl.TextChangedイベントを処理しています。
では、サンプルのプログラムを見てみましょう。
// label01.cs using System; using System.Drawing; using System.Windows.Forms; class label01 : Form { public static void Main() { label01 form = new label01(); MyLabel ml = new MyLabel(); ml.Parent = form; MyTextBox mt = new MyTextBox(); mt.Parent = form; mt.Location = new Point(10, ml.Height + 20); Application.Run(form); } public label01() { Text = "猫でもわかるC#プログラミング"; BackColor = SystemColors.Window; } } class MyLabel : Label { public MyLabel() { Location = new Point(10, 10); Size = new Size(200, 100); BorderStyle = BorderStyle.Fixed3D; } } class MyTextBox : TextBox { public MyTextBox() { BackColor = SystemColors.Control; Multiline = true; Size = new Size(200, 100); } protected override void OnTextChanged(EventArgs e) { base.OnTextChanged(e); Parent.Controls[0].Text = Text; } }実行結果は次のような感じになります。
下のテキストボックスに書き込むと、上段のラベルに同じ文章が表示されます。
テキストボックスを複数行対応にするには、
Multiline = true;とします。
また、ラベルはそのままでは、どこにあるのかわからないので、
BorderStyle = BorderStyle.Fixed3D;として、境界をFixed3Dスタイルにしています。
Update 17/Nov/2006 By Y.Kumei