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

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

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

イベント処理を作成

次にイベントが発生した時に呼び出されるメソッドを追加していきましょう。

まず「フォームエディタ」上の「closeButton」をクリックして選択状態にします。 画面右下の「プロパティ」の画面をイベント表示に切り替えます。 稲妻のアイコンをクリックすることでイベント画面に切り替わります。

再度プロパティ画面に切り替える時は,稲妻のアイコンの右隣りのアイコンをクリックしてください。

画像

表示されたButtonコントロールのイベント名の一覧からClickをダブルクリックすることで,次の処理が自動的に行われます。

  1. closeButton_ClickメソッドがForm1.csファイルに追加されます。
  2. closeButton_Clickメソッドを呼び出すためのイベントハンドラがcloseButton.Clickイベントに追加されます。
  3. Form1.csコードエディタが起動します。

イベントハンドラを追加する方法は,以上の通り簡単です。

しかし,2番目のcloseButton_Clickメソッドを呼び出すためのイベントハンドラの追加について疑問を持たれた方も多いのではないでしょうか?

VB6では,1番目の処理だけが行われるのみでした。そして,closeButtonがクリックされた場合の処理が不要になったら,対応するメソッドを削除するだけでよかったハズです。

しかし,C#では,イベントハンドラを追加する必要があります。

では,どこで追加しているのでしょうか?

この答も自動生成されたコードにあります。 自動生成されたコードに関する説明は後述しますので,そちらを参考にしてください。

さて,VB6サンプルソフトのコードに記述されているイベントハンドラは,ほかにも複数ありました。

再度「Form1.cs[デザイン]」タブをクリックして,以下のコントロールのイベントハンドラも作成してしまいましょう。

  • addButton.Click
  • readButton.Click
  • updateButton.Click
  • deleteButton.Click
  • Form1.Load
  • Form1.FormClosed

なお,Unloadイベントは,Formクラスのメンバではないため,FormClosedイベントを代用します。

自動生成されたコード

今までの説明で,2つの疑問を残してきました。

ひとつ目は,Nameプロパティの値を変更した時にリファクタリングする理由について。もう一つは,各メソッドを呼び出すためのイベントハンドラが存在するという点についてです。

これらの答えは,自動生成コードにあります。 ここでは,自動生成されたコードの内容を解説しながら,上記の疑問を解決していきたいと思います。

複雑そうに見えるかも知れませんが,現時点では雰囲気をつかんでいただけるだけで大丈夫です。

まずは,Form1.csタブをクリックして,Form1.csのコードエディタに切り替えてください。

ここには,先ほど皆さんがイベントハンドラを登録したことによって生成されたメソッドも含めて,自動生成されたコードが大量に記述されています。

この先頭部分にある「InitializeComponent()」の記述によってInitializeComponent()というメソッドを呼び出しています。

C#では,キーワードの後ろに()が付いているものをメソッドとして扱います。 つまりVB6で記述するとCall InitializeComponentあるいは単純にInitializeComponentと記述されていることと同じ意味です。

画像

しかし,InitializeComponentなどというメソッドの本体は,どこにも記述されていません。

そこで,InitializeComponentと記述されている部分で右クリックしてコンテキストメニューを開き,ここから「定義へ移動(G)」を選択してみてください。

Form1.Designer.csのコードエディタが新たに開き,InitializeComponent()メソッド本体を確認することができます。 なお,Form1.Designer.csファイルですが,ソリューションエクスプローラーのForm1.csファイルの右にある+マークをクリックして展開すると,その存在を確認できます。

このファイルを眺めてみてください。何となく今までフォームエディタやプロパティ,さらにイベントで登録した内容が記述されているらしいC#のコードであることがわかるかと思います。

実は,このファイルに格納されている自動生成されたコードが,フォームエディタやプロパティ,イベントによって設定した内容の本体です。

したがって,このコードを削除してすべて自分で記述してもフォームにコントロールは配置できますし,また,仮に注意書きを無視してコードエディタで値を直接編集してもフォームエディタにその変更内容が反映されます。

ただし,上記はあくまでも例え話で,実際に上記のコードを編集すると,フォームエディタのエラーを招く恐れがあるのでお勧めはしません。

著者プロフィール

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

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