[C#]イベント徹底解説|WindowsFormアプリケーションでのイベント登録方法・ラムダ式での記述方法
![[C#]イベント徹底解説|WindowsFormアプリケーションでのイベント登録方法・ラムダ式での記述方法](https://www.fenet.jp/dotnet/column/wp-content/uploads/2020/08/pixta_58766801_M-960x320.jpg)
[C#]イベント徹底解説
今回は、C#でのイベントの扱い方について説明します。Windows Formアプリケーションでのイベント登録方法、ラムダ式での記述方法について紹介します。また、イベントのキャンセル方法や削除方法についても紹介します。
C#でのイベントの扱い方に興味のある方はぜひご覧ください。
イベント登録
C#でのイベント登録方法について紹介します。ここでは、ソースコードからイベント登録します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System; using System.Windows.Forms; using System.Drawing; namespace WindowsFormsApp1 { public partial class Form1 : Form { Button button; public Form1() { // ボタン button = new Button(); button.Location = new Point(10, 10); button.Text = "button"; // イベント登録 button.Click += Button1_Click; this.Controls.Add(button); } // ボタンクリックイベント private void Button1_Click(object sender, EventArgs e) { MessageBox.Show("ボタンがクリックされました。"); } } } |
実行すると、ボタンクリック時にイベントが発行されて、MessageBoxで「ボタンがクリックされました。」が表示されることが分かります。また、デザイン画面のプロパティ設定画面からでも、ボタンクリックイベントを登録できます。
ラムダ式
C#では、ラムダ式でイベント登録できます。ラムダ式で記述することで、ソースコードがシンプルになります。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; using System.Windows.Forms; using System.Drawing; namespace WindowsFormsApp1 { public partial class Form1 : Form { Button button; public Form1() { // ボタン button = new Button(); button.Location = new Point(10, 10); button.Text = "button"; // イベント登録 button.Click += (sender, e) => { MessageBox.Show("ボタンがクリックされました。"); }; this.Controls.Add(button); } } } |
Button1_Clickメソッドがなくなり、シンプルに記述できます。このようにC#では、ラムダ式でイベント登録できます。
イベントキャンセル
C#でのイベントキャンセル方法について紹介します。ここでは、セーブしないままアプリケーションを終了しようとすると、終了をキャンセルする流れとします。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
using System; using System.Windows.Forms; using System.Drawing; using System.ComponentModel; namespace WindowsFormsApp1 { public partial class Form1 : Form { Button button; bool isSaved = false; public Form1() { // ボタン button = new Button(); button.Location = new Point(10, 10); button.Text = "save"; // イベント登録 button.Click += (sender, e) => { MessageBox.Show("Saved!"); isSaved = true; }; this.Controls.Add(button); this.Closing += new CancelEventHandler(this.Form1_Closing); } private void Form1_Closing(Object sender, CancelEventArgs e) { // 未saveの場合 if (!isSaved) { // イベントをキャンセルする e.Cancel = true; MessageBox.Show("Please save."); } // save済みの場合 else { e.Cancel = false; } } } } |
「save」ボタンをクリックせずに×ボタンで終了しようとすると、「Please save.」というメッセージが表示され、アプリケーションを終了できません。「e.Cancel = true;」でイベントをキャンセルしています。
「save」ボタンクリック後であれば、×ボタンでアプリケーションを終了できます。このようにC#では、イベントのキャンセルができます。
イベント削除
C#でのイベント削除方法について紹介します。「button1.Click +=」でイベントを登録できますが、「button1.Click -=」でイベントを削除できます。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
using System; using System.Windows.Forms; using System.Drawing; namespace WindowsFormsApp1 { public partial class Form1 : Form { Button button1, button2; public Form1() { // ボタン button1 = new Button(); button1.Location = new Point(10, 10); button1.Text = "button1"; // イベントハンドラ EventHandler handler1 = (sender, e) => { MessageBox.Show("ボタン1がクリックされました。"); }; // イベント登録 button1.Click += handler1; this.Controls.Add(button1); // ボタン button2 = new Button(); button2.Location = new Point(10, 40); button2.Text = "button2"; // イベントハンドラ EventHandler handler2 = (sender, e) => { MessageBox.Show("ボタン1のイベントハンドラを削除します。"); // イベント削除 button1.Click -= handler1; button2.Enabled = false; }; // イベント登録 button2.Click += handler2; this.Controls.Add(button2); } } } |
「button1」をクリックするとMessageBoxが表示されますが、button2をクリックするとhandler1が削除されるので、ボタンクリックイベントが削除されます。「button1」をクリックしてもMessageBoxは表示されなくなります。
まとめ
いかがでしたでしょうか。C#でのイベントの扱い方について説明しました。
Windows Formアプリケーションでのイベント登録方法、ラムダ式での記述方法について紹介しました。また、イベントのキャンセル方法や削除方法についても紹介しました。
ぜひご自身でC#のソースコードを書いて、理解を深めてください。