ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

イベントについて

f:id:covory10101101276:20171205170218p:plain

みなさんこんにちは🌚

ポケ森でもぐもぐの元不足に悩まされているブルーノです。ツバクロをキャンプから追い出してお礼をせしめないと...

さて今回はGUIベースのアプリケーションには必須なイベントというものについてやっていきたいと思います。

 

イベント

今までスクリーンショットで貼ってきたものはコンソールアプリケーション(CUI)と呼ばれるもので、ユーザーからの入力に反応する場合(例えばConsole.ReadLineなど)、キーボードからの入力についてのみ反応するようにプログラムを組んでいました。もちろんこれだけでも文字の型を適切なものにしたり時には弾いたりなど、あらゆる入力に対応できるよう工夫が必要でしたが、これが一般的にみるグラフィカルユーザーインターフェースベースのアプリの場合ユーザーはどこをクリック(タップ)したり、ドラッグしたり、時にはキーを打ち込んだり、まあやることが多すぎてわかりません。そこで今まではプロパティなどで「入力されたものが何々(以外)だったら」という形でしたが、今度は「何々(以外)が入力されたら」→「何々する」という形にしていきたいと思います。この「何かが起きた」ことをイベントと言い、このイベントが起きてからそれに対する一連の動作の流れをイベントハンドラと言います。

では画像を見ながら少しづつ紐解いていきたいと思います。

f:id:covory10101101276:20171205174343p:plain

f:id:covory10101101276:20171205174347p:plain

まず注目するのが5~14行目のBruno075クラスで、これはイベントを発生させるクラスになります。7行目のeventキーワードを使ったものをイベントフィールドと言い、これをメインメソッドで実行させます。しかし7行目時点ではこのイベントフィールドには何も入っていないので実行させてはいけません。この何もない状態をnull(ヌル)と言います。そこで9行目~13行目のOnEventnameメソッドでeventnameがnullでない(何か入っている)時にこれを呼び出せるスイッチを設けています。実際のメインメソッド(43行目)ではこのスイッチを実行していますね。このスイッチの役割を果たすメソッドの名前は一般的に「On~~」という名前にします(もちろんしなくても構いません)。Bruno076, 077クラスはただ2種類のshowを表示するだけのメソッドです。これをBruno078クラスのメインメソッドでまず36,37行目にあるようにインスタンス化します。そしてイベントを発生させるクラスもインスタンス化し、40,41行目にあるようにその中のイベントフィールドにメソッドを追加していきます。(この時ソフトに「冗長なデリゲート宣言」とか言われたんですが無駄に長いってことですかね😅もっと短くできるのかな)

そして最後に格納したメソッドを43行目のOnEventnameメソッドで実行しています。

イベントフィールドにメソッドを追加するときは「=」ではなく「+=」で行うよう注意しましょう

今回はここまでにして起きます。

 

だんだん説明が長くなってきちゃいました。でもこれら全部大事なことなので、ノートに書き込む感覚でしっかりメモして行こうと思います。

ポケ森楽しい〜〜。もぐもぐのもとは相変わらず足りない😭