イベント駆動
C#たん:
GUIアプリケーション開発は「受け身」です。「ボタンが押されたよ」というようなイベントがやってくるまで何もしません。 |
|
イベント駆動(event-driven)というやつね。イベントをきっかけとして処理が動き始める、イベントがすべての処理を動かす(drive)っていう意味で。
|
最初に(レイアウト時、UI部品を作るときに)、イベントハンドラー(event handler)の登録だけは能動的に行います。イベントハンドラーというのは、イベントが起きた時に呼び出される処理のことです。
UI部品をC#で作るなら、イベントハンドラーの登録は以下のようになります。
var button = new Button { Content = "button" }; button.Click += button_Click;
button_Clickはメソッドの名前で、例えば、メッセージボックスを表示するだけの簡単な処理なら以下のようになるでしょう。このメソッドは、ボタンが押されたときに初めて呼び出されます。
private void button_Click(object sender, RoutedEventArgs e) { MessageBox.Show("ボタンが押されました"); }
同様のイベントハンドラー登録をXAMLで書くなら以下のようになります。
<Button Content="Button" Click="button_Click" />
コマンド
さて、最初の言いつけどおり、中核処理の部分をGUIに依存しないように作っておけば、イベントハンドラー内に書くべきことはほとんど何も残らないはずです。
|
「何が起きたか」に相当するイベントに対して、「どういう処理をしたいか」というのをコマンド(command)と呼びます。イベントハンドラーですべきことは、このイベントとコマンドの対応付けだけです。
複数のイベント、例えば、「ボタンをクリック」「メニューをクリック」「ショートカットキーを入力」などに対して同じコマンドを結び付けたい場合もあります。
というか、WPFの場合、ボタンやメニューに対して直接コマンドを与える仕組みがフレームワークに組み込まれていて、イベントハンドラーを書く必要自体、ほとんどなかったりします。
具体的な書き方は次節で説明します。 |