第28章 テキストボックス


テキストボックスがあると、ユーザーからのテキスト入力を受け取ることができます。



テキストボックスは、TextBoxクラスを利用して作ります。

まずは、TextBoxクラスの継承関係を見てみましょう。

System.Object 
   System.MarshalByRefObject 
     System.ComponentModel.Component 
       System.Windows.Forms.Control 
         System.Windows.Forms.TextBoxBase 
          System.Windows.Forms.TextBox
Buttonクラスと同じく、Controlクラスから継承されていますね。従ってテキストボックスはボタンと取り扱いが非常に似ています。

まずは、コンストラクタを見てみましょう。

public TextBox ()
オーバーロードバージョンはありません。

次のようなプロパティを知っているとすぐにテキストボックスが作れます。

プロパティプロパティ値意味
Textstringコントロール内に表示するテキストの取得・設定
LocationPoint左上隅の座標の取得・設定
ParentControl親の取得・設定
Widthintコントロールの幅の取得・設定
Heightintコントロールの高さの取得・設定

では、さっそく簡単なテキストボックスのプログラムを作ってみましょう。

// textbox01.cs

using System;
using System.Drawing;
using System.Windows.Forms;

class textbox01
{
    public static void Main()
    {
        Application.Run(new MyForm());
    }
}

class MyForm : Form
{
    TextBox textbox;
    
    public MyForm()
    {
        Text = "猫でもわかるC#";
        BackColor = Color.Aqua;
        FormBorderStyle = FormBorderStyle.Fixed3D;
        Width = 200;
        Height = 110;
        MaximizeBox = false;

        textbox = new TextBox();
        textbox.Parent = this;
        textbox.Location = 
            new Point((ClientSize.Width - textbox.Width) / 2, 10);

        Button btn = new Button();
        btn.Text = "押す";
        btn.Parent = this;
        btn.Location = new Point((ClientSize.Width - btn.Width) / 2,
            20 + textbox.Height);
        btn.Click += new EventHandler(btn_Click);
        btn.BackColor = SystemColors.Control;
    }

    void btn_Click(object sender, EventArgs e)
    {
        MessageBox.Show("あなたは「" + textbox.Text + "」と記入しましたね",
            "猫C#",
            MessageBoxButtons.OK,
            MessageBoxIcon.Information);
    }

    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        base.OnFormClosing(e);
        DialogResult dr;
        dr = MessageBox.Show("本当に終了してよいですか",
            "猫C#",
            MessageBoxButtons.YesNo,
            MessageBoxIcon.Question,
            MessageBoxDefaultButton.Button2);
        if (dr == DialogResult.Yes)
            e.Cancel = false;
        else
            e.Cancel = true;
    }
}
MyFormクラスは、Formクラスを継承しています。

コンストラクタでは、このフォームのテキストと背景色をいつものように設定しています。さらに、FormBorderStyleも設定しています。これは、フォームの境界のスタイルを取得・設定するプロパティです。

public FormBorderStyle FormBorderStyle { get; set; }
プロパティ値のFormBorderStyle列挙体のメンバには次のようなものがあります。

メンバ意味
Fixed3D固定された3D境界線
FixedDialog固定されたダイアログスタイルの境界線
FixedSingle固定された一直線の境界線
FixedToolWindowサイズ変更できないツールウィンドウの境界線
None境界線なし
Sizableサイズ変更できる境界線
SizableToolWindowサイズ変更できるツールウィンドウの境界線

また、このプログラムではフォームの幅・高さも設定しています。

public int Width { get; set; }
public int Height { get; set; }
さらに、Form.MaximizeBoxをfalseにして、最大化ボタンを無効にしています。
public bool MaximizeBox { get; set; }
最小化ボタンを有効にするかどうかは、Form.MinimizeBoxプロパティを使います。
public bool MinimizeBox { get; set; }
次にいよいよテキストボックスを作っています。
textbox = new TextBox();
textbox.Parent = this;
textbox.Location = 
    new Point((ClientSize.Width - textbox.Width) / 2, 10);
子供コントロールを作るときは、必ずParentプロパティでその親を指定する必要がありました。テキストボックスについても同じです。

Locationプロパティで表示位置を指定します。

Form.ClientSizeプロパティは、フォームのクライアント領域の幅・高さを取得・設定します。

public Size ClientSize { get; set; }
テキストボックスが、水平方向でクライアント領域の中央に表示されるようにしていますね。

次に、ボタンを作っています。

これも、水平方向でクライアント領域の中央に来るように指定しています。

ボタンが押されたら、btn_Clickハンドラが実行されるようにしています。

btn_Clickメソッドが実行されると、テキストボックスのTextプロパティをメッセージボックスで表示しています。このプログラムでは、btn_Clickメソッドからもテキストボックスが見えるようにするため、MyFormクラスのインスタンスフィールドにtextboxフィールドを作っている点に注意してください。

OnFormClosingメソッドをオーバーライドして、終了確認をしています。

では、実行結果を見てみましょう。

テキストボックスに適当な文字列を入力して「押す」ボタンを押します。



テキストボックスに入力した文字列が、メッセージボックスで表示されます。




[C# フォーム Index] [C# コンソール Index] [総合Index] [Previous Chapter] [Next Chapter]

Update 12/Nov/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。