コードエディタで Form1.cs を修正
前回までは、Visual Studio で新規プロジェクトを作成し、デザイナーを使って配置したコントロールのプロパティを修正しました。
今回からは、いよいよプログラムのコード部分にも触れていきます。コードを修正することで、フォームデザイナーでは実現できない複雑な動きをプログラムに加えることができます。
コードの修正で注意したいのが、プログラムにはバグと呼ばれる予期せぬミスが発生することです。コードには誤りが発生するものということを頭の隅に入れ、プログラムは修正するたびに確認する習慣をつけると良いでしょう。
もし、修正したプログラムがエラーで動かなくなったり、思った通りの動作をしなくなったときは、修正前の状態に戻してみるのも手です。プロでもバグやエラーの対処は日常茶飯事ですので、投げ出す前に焦らず、考えることを楽しみながら、少しずつ進めていきましょう。
コードエディタの開き方
前回はデザイナーを使用しましたが、コードを編集する場合はコードエディタを使います。
コードエディタを表示するには、ソリューションエクスプローラーにある「Form1.cs」を、右クリック >[コードの表示]を選択してください。
ソリューションエクスプローラーが見当たらない場合は、メインウィンドウから[表示]>[ソリューションエクスプローラー]を選択してください。
デザイナーからもコードエディタを開くことができます。その場合は、メインウィンドウの「Form1.cs [Design] 」タブで、 右クリック >[コードの表示]を選択してください。
メインウィンドウの「Form1.cs」タブが選択され、フォーム画面のコードエディタが表示されます。コードエディタにはプログラムが動作する最低限のコードが、デフォルトで記述されています。ここにコードを追加していきます。
動作確認してみよう
コードを追加する前に、まずは現在のプログラムを実行して確認してみましょう。
メインウィンドウの[ビルド]>[ソリューションのビルド]を選択してエラーがないことを確認したら、メインウィンドウの[デバッグ]>[デバッグの開始]を選択してください。
ソリューションのビルドについて振り返る場合は、次の記事を参考にしてみてください。
デバッグについて振り返る場合は、次の記事を参考にしてみてください。
現在のプログラムの実行結果は、小さなウィンドウが表示されるだけです。ウィンドウ右上の[×]ボタンを押下すると、フォーム画面は閉じ、そのままプログラムも終了します。
手始めに、プログラムを実行した後の処理を追加してみましょう。プログラムが実行されたときに動作する処理は、イベントを追加して記述することができます。
イベントとは?
イベントとは、ユーザーがプログラムを操作をしたときに発動するスイッチのようなものです。
先ほどプログラムを実行したとき、ウィンドウ右上の[×]ボタンを押下するという操作をしたと思います。その結果、フォーム画面は閉じ、プログラムは終了しました。
この処理をプログラムに追加する場合は、ウィンドウ右上の[×]ボタンを押下したときに発動するイベントを追加し、そのイベントにフォーム画面を閉じてプログラムを終了するコードを記述することで実現できます。
イベントの追加
イベントの追加は、デザイナーから簡単に行うことができます。
一度デザイナーに戻りましょう。「Form1.cs [Design] 」タブを開き、 右クリック >[プロパティ]を選択します。
プロパティウィンドウ上部のドロップダウンリストに注目してください。ドロップダウンリストをクリックすると次の2つの項目が表示されます。
- Form1 System.Windows.Forms.Form
- pictureBox1 System.Windows.Forms.PictureBox
ドロップダウンの1行目は Form コントロールのプロパティ、2行目は PictureBox コントロールのプロパティを指しています。
1行目の「Form1 System.Windows.Forms.Form」を選択してください。選択すると、プロパティウィンドウには Form コントロールのプロパティが表示されます。
ちなみに、もう一方の「pictureBox1 System.Windows.Forms.PictureBox」を選択した場合は、PictureBox コントロールのプロパティが表示されます。
イベントはコントロールごとに設定することができます。ですので、イベントを追加するときはこのドロップダウンから適切なコントロールを選択してから追加するようにしてください。
「Form1」コントロールが選択できたら、次はプロパティウィンドウの上部のアイコンに注目してください。雷のマークのアイコンがあります。このボタンは[イベント]ボタンです。
[イベント]ボタンを選択すると、Form コントロールに追加できるイベントの一覧が表示されます。ここからイベントを登録することができます。
Load イベントの追加
プログラム起動後に発動するイベントは Form コントロールの「Load」イベントを使用すると便利です。
このイベントは、Form コントロールの読み込み時に処理されるので、プログラムを始めに表示するときには。プロパティウィンドウからイベント名「Load」を探してください。
イベント名「Load」を見つけたらダブルクリックします。
ダブルクリックすると「Form1.cs」が自動で開き、コードエディタが表示されます。
コードエディタの20行目以降に注目してください。先ほどコードエディタを確認したときにはなかったコードが追加されているはずです。
Form1.cs(20-23行目)private void Form1_Load(object sender, EventArgs e)
{
}
このコードはイベント関数と呼ばれるもので、イベントが発動したときに呼び出される関数です。今回の Load イベントの場合は、プログラムを実行した直後にこのイベント関数が呼び出され、関数内の処理を実行します。
このように、イベントを追加するとコードエディタにイベント関数が自動で追加されます。そして、イベントが発動したときのプログラムの動作を記述することができます。
自動生成されたイベント関数を削除するとエラーが発生することがあります。イベント関数はデザイナー側と繋がっているため、コードエディタ側のみを削除するとビルドエラーが発生したり、デザイナーを開けなくなったりします。
イベント関数を削除する場合は、必ずデザイナーで削除した後にコードエディタから削除するようにしてください。
【番外】イベント関数の削除
イベント関数が不要になった場合や、誤ってイベント関数を追加してしまった場合は、先にデザイナーからイベント関数を削除します。
削除する前に
イベント関数を削除する前に、コードを確認してみてください。関数の上に「1 個の参照」と表示されています。
Form1.cs(20-23行目)1 個の参照
private void Form1_Load(object sender, EventArgs e)
{
}
これは、この関数を呼んでいる箇所(=参照)が1個あるという意味です。
次に、クリックしてみると、吹き出しが表示されます。
MouseStalker/Form1.cs/Form1.Designer.cs(1)
54 : this.Load += new System.EventHandler(this.Form1_Load);
すべて折りたたむ
この吹き出しには、この関数を呼んでいる箇所(=参照)の一覧が表示されます。
今回の場合は「Form1.Designer.cs」でこの関数が呼ばれていることがわかります。
コードエディタで関数を削除すると、「Form1.Designer.cs」は削除された関数を呼んでいる状態になってしまい、関数が見つからないことでビルドエラーが発生します。エラーが発生しないように削除するには「Form1.Designer.cs」からの参照を削除する手順が必要になります。
「Form1.Designer.cs」は、これまでにコントロールを配置したりイベントを追加してきたデザイナーの情報が記述されているファイルです。このファイルを直接修正して、コントロールを配置したりイベントを追加したりすることもできます。ただし、予期せぬバグの原因になることもあるので、編集の際は十分に注意してください。
削除する方法
プロパティウィンドウで Form コントロールのプロパティを開き、イベント一覧を表示してください。
画像付きの手順は、このページの以下の章で確認できます。
プロパティウィンドウは、「Form1.cs [Design] 」で 右クリック >[プロパティ]を選択して表示できます。
Form コントロールのプロパティは、プロパティウィンドウ上部のドロップダウンリストをクリックして「Form1 System.Windows.Forms.Form」を選択して表示できます。
イベントは、プロパティウィンドウ上部の[イベント]ボタン(雷のマークのアイコン)をクリックして表示できます。
イベントの一覧から先ほど追加した「Load」の項目を探してください。
見つけたら、Load イベントで 右クリック >[リセット]を選択してください。
すると Load イベントの欄から関数名が消えます。これでイベント関数の参照は削除されました。
それではコードを確認してみましょう。
関数の上に「0 個の参照」と表示されていれば、この関数の参照は1つもないことになります。これでエラーなく関数を削除することができます。
Form1.cs(20-23行目)0 個の参照
private void Form1_Load(object sender, EventArgs e)
{
}
これでコードから関数を削除してもエラーが発生しないことでしょう。
きりの良いところで、適宜、プロジェクトを保存するようにしましょう。