Form1.cs

フォームのクラスを記述している、Form1.cs の using 文を省略したものが次の部分だ。

namespace Learn
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

.NET の Form (System.Windows.Forms.Form) クラスから導出して、自分のアプリケーション用の Form1 を作るようになっている。Form1 クラスと同じ名前のメソッド、Form1() はコンストラクタで、 new Form1() で Form1 のインスタンスを生成するときに、最初に実行される。インスタンスの初期化を行うメソッドだ。ここでは、InitializeComponent() メソッドを実行するようになっている。

クラスの定義は partial キーワードを使うとファイルがわかれていても同じクラスについてのプログラムができるから、InitializeComponent() メソッドは別のファイル、Form1.Desiner.cs に記述されている。

namespace Learn
{
    partial class Form1
    {
        /// <summary>
        /// 必要なデザイナ変数です。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        /// <param name="disposing">マネージ リソースが破棄される場合 true、破棄されない場合は false です。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows フォーム デザイナで生成されたコード

        /// <summary>
        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディタで変更しないでください。
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Text = "Form1";
        }

        #endregion
    }
}

上のプログラムで、Dispose メソッドはおそらくデストラクタだ。もう一つの InitializeComponent() が、Form1.cs のコンストラクタで呼び出されていたメソッドだ。InitializeComponent() の中では、components 属性に、System.components.ComponentModes.Container クラスのインスタンスを収め、Text 属性に "Forn1" を収めてフォームの属性を設定しているが、フォームの属性全部を記述する必要はなく、他はデフォールト値が使えるようだ。

ただし、componets インスタンス変数は

private System.ComponentModel.IContainer components = null;

で初期化しておく必要があるようだが、理由は今のところわからない。フォームのプロパティを変更したらこの InitializeComponent() の部分のコードが変化するのだろうと思ったので、Form1 をデザインビューで表示して、プロパティウィンドウで FormBorderStyle を Fixed3D に変更してみたら、次のように変わっていた。

private void InitializeComponent()
{
    this.SuspendLayout();
    //
    // Form1
    //
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(284, 263);
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
    this.Name = "Form1";
    this.Text = "Form1";
    this.Load += new System.EventHandler(this.Form1_Load);
    this.ResumeLayout(false);

}

FormBorderStyle プロパティを変更しただけでこれだけの記述変更が行われるのだから、デザインビューであれこれコントロールを張り付けていたらどれくらいの記述になるのだろうと感動した。デザインビューでフォームをいじるのは立派なプログラミングの作業だったのだ。

そうなると、.NET のウィジェット関連のクラスの名前やプロパティの名前を覚えたりという作業はあまり必要がないということになる。デザインビューで直観的に作業したり、プロパティウィンドウでプロパティの設定をしたことがすべてプログラムとして記述されていくからだ。何の気もなくマウスで作業していたことが、実際はすごい量のプログラムを記述する作業だった。

実際、個人的に使いたいアプリケーションの大半は、フォームに入出力用の数個のTextBox を配置して計算用のボタンを配置したらそれをダブルクリックしてコールバック関数を記述するくらいのプログラミングで済んでしまう。実用的には、Visual C# の入門書をちょっと読むだけでもう立派なC#プログラマだ。
[PR]
by tnomura9 | 2010-01-23 16:40 | C# | Comments(0)
<< フォームにボタンを配置する。 Program.cs >>