VB6開発者向け:C#で始める.NETプログラミング

第4回 C#フォームとイベントの作成

この記事を読むのに必要な時間:およそ 4 分

VB6では,フォームデザイナやプロパティウィンドウ,またはイベントハンドラによる呼び出しに関する部分については,コードとして明示されることはありませんでした。 しかし,C#ではこれらの内容がC#のコードとして記述されています。

以下にInitializeComponent()メソッド本体のコードを抜粋してみましょう。

/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
    this.updateButton = new System.Windows.Forms.Button();
    this.label1 = new System.Windows.Forms.Label();
    this.codeTextBox = new System.Windows.Forms.TextBox();
    this.nameTextBox = new System.Windows.Forms.TextBox();
    this.label2 = new System.Windows.Forms.Label();
    this.telephoneNumberTextBox = new System.Windows.Forms.TextBox();
    this.label3 = new System.Windows.Forms.Label();
    this.deleteButton = new System.Windows.Forms.Button();
    this.closeButton = new System.Windows.Forms.Button();
    this.addButton = new System.Windows.Forms.Button();
    this.readButton = new System.Windows.Forms.Button();
    this.SuspendLayout();
    // 
    // updateButton
    // 
    this.updateButton.Location = new System.Drawing.Point(12, 112);
    this.updateButton.Name = "updateButton";
    this.updateButton.Size = new System.Drawing.Size(75, 23);
    this.updateButton.TabIndex = 0;
    this.updateButton.Text = "更新";
    this.updateButton.UseVisualStyleBackColor = true;
    this.updateButton.Click += new System.EventHandler(this.updateButton_Click);

最初に,///から始まる行があります。これは,特別な意味を持つコメントです。詳細は後述します。

次に,Form1に配置されたコントロールの名前が全て列挙されています。これは各コントロールオブジェクトを生成するためのコードです。VB6では次のように記述できます。

Set updateButton = New CommandButton

updateButton変数にオブジェクトを生成しているということは,VB6のコードで以下のようにupdateButton変数を定義している部分に相応する記述もある筈です。

Dim updateButton As CommandButton

これは,一番下にまとまって定義されています。

private System.Windows.Forms.Button updateButton;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox codeTextBox;
private System.Windows.Forms.TextBox nameTextBox;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox telephoneNumberTextBox;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Button deleteButton;
private System.Windows.Forms.Button closeButton;
private System.Windows.Forms.Button addButton;
private System.Windows.Forms.Button readButton;

privateはVB6でもありましたね。

その後のSystem.Windows.Forms.Buttonは,コントロールの型を示しています。

そして,最後に変数名です。一番上がupdateButtonを定義している部分です。

両者を見比べると,各キーワードが前後したり,長くなっているだけの違いでしかありません。

さて,その後に// updateButtonと記述されています。

この//から始まる行は単純なコメントです。//から行の終端までに記述された部分がコメントとして扱われます。

その後に,updateButtonのプロパティの値を設定するためのコードが書かれています。

さて,この部分を見れば,何故コントロール名を変更する度にリファクタリングされたのかがご理解いただけたかと思います。

Nameプロパティの値をupdateButtonと変更したことによって,上記のコードのButton1のように記述されていた部分がupdateButtonに自動的に変更されていたためなのです。

最後にClickイベントに対して,updateButton_Clickメソッドを呼び出すためのイベントハンドラが登録されている記述になります。

VB6のコードエディタは,updateButtonコントロールのClickイベントが不要になった時,closeButtonメソッドを削除するだけでした。

しかし,C#は,updateButton_Clickメソッドのみを削除しても,上記のイベントハンドラでupdateButton_Clickを呼び出そうとするためにエラーが発生します。

私自身VB6からC#に移行した直後は,このエラーに悩みました。

しかし,今回のように仕組みがわかってしまえば簡単です。

例えば,closeButtonのClickイベントが不要になった時は,まず,以下の画面からcloseButton_Clickと記述されている部分を削除してからcloseButton_Clickメソッドのコードを削除するように注意してください。

画像

次回の予定

今回は,C#3.0を使ってフォームを作成し,イベントに対するメソッドを登録しました。

また,これによって自動生成されたコードについても,雰囲気がつめたかと思います。

次回からは,C#のコーディングと言語の解説を行います。

著者プロフィール

伊藤達也(いとうたつや)

(株)井沢電器設備にて、業務管理システムの開発に従事しています。 この記事の趣旨通り、筆者自身が2005年後半にメインの開発言語をVB6からC#に移行し、2007年には Microsoft MVPアワードをC#で受賞しました。