.NET TIPS ボタンのClickイベントをシミュレートするには?デジタルアドバンテージ 一色 政彦2005/03/04 |
|
|
Windowsアプリケーションでは、1つの機能に対して、2つ以上の操作方法を用意したい場合がある。例えば、次の画面で示すサンプル・アプリケーションでは、ボタンの色がランダムに変化する機能が1つあり、その機能を実行するための方法として、メニューバーのメニュー項目を選択する方法と、ボタンをクリックする方法の2つを提供している。
ボタンの色がランダムに変化するサンプル・アプリケーション | ||||||
ボタンの色がランダムに変化するという1つの機能を実行する方法として、メニューバーのメニュー項目を選択する方法と、ボタンをクリックする方法の2通りが用意されている。 | ||||||
|
このアプリケーションのように、メニューからの操作による処理が、ボタンがクリックされたときの処理とまったく同様な場合には、その処理を1つにまとめることができる。本稿ではそのような場合の実装方法について紹介する。
ランダムに色が変化するボタン・クラス
このアプリケーションでは、ボタンの色がランダムに変化する機能を、そのボタンのクラス内に実装している(なお、ランダムに数値を生成する方法については、「TIPS:乱数を生成するには?」を参照してほしい)。
具体的なボタン・クラスの実装コードは次のとおりだ。
|
|
ボタンの色をランダムに変化させる機能を持つボタン・クラス(C#) | |
このCustomButtonクラスは、標準のButtonクラスを継承したクラスで、オーバイライドしたOnClickメソッドで、SetRandomBackColorメソッドを呼び出して背景色を変更している。SetRandomColorメソッドに、背景色をランダムに変化させる機能が実装されている。 |
|
|
ボタンの色をランダムに変化させる機能を持つボタン・クラス(VB.NET) | |
このCustomButtonクラスは、標準のButtonクラスを継承したクラスで、オーバーライドしたOnClickメソッドで、SetRandomBackColorメソッドを呼び出して背景色を変更している。SetRandomColorメソッドに、背景色をランダムに変化させる機能が実装されている。 |
上記コードでは、ボタンがクリックされたときに呼び出されるOnClickメソッドをオーバーライドし、そのメソッド内でCustomButtonクラスのSetRandomBackColorメソッドを呼び出してボタンの背景色を変更している。
メニューからもこの処理を実行するには、ボタンをクリックしたときと同じように、メニュー項目のClickイベント・ハンドラ内でCustomButtonオブジェクトのSetRandomColorメソッドを呼び出してもよいが、そうせずにそのまま「ボタンがクリックされたことに」してしまうのも1つの手だ。つまり、ボタン・クリックをシミュレートするわけだ。
ボタン・クリックをシミュレートするメソッド
これを行うメソッドが、Buttonクラス(System.Windows.Forms名前空間)のPerformClickメソッドである。このメソッドを呼び出すことにより、ボタンがクリックされたときの処理を別の個所から実行することができる。
ちなみに、同様のクリック・シミュレート機能を持つPerformClickメソッドは、RadioButtonコントロール(System.Windows.Forms名前空間)やMenuItemクラス(System.Windows.Forms名前空間)にも存在する。
それでは、このPerformClickメソッドを使って、メニュー項目を選択するとボタンの色がランダムに変化する機能を実装したサンプル・コードを次に示そう。
|
|
ボタン・クリックをシミュレートするサンプル・プログラム(C#) | |
メニュー項目のClickイベント・ハンドラ内で、CustomButtonオブジェクトのPerformClickメソッドを呼び出している。これにより、ボタンのクリック操作がシミュレートされ、本稿の例ではボタンの色がランダムに変更されることになる。 |
|
|
ボタン・クリックをシミュレートするサンプル・プログラム(VB.NET) | |
メニュー項目のClickイベント・ハンドラ内で、CustomButtonオブジェクトのPerformClickメソッドを呼び出している。これにより、ボタンのクリック操作がシミュレートされ、本稿の例ではボタンの色がランダムに変更されることになる。 |
PerformClickメソッドを利用するメリットとは?
上記コードのようなボタン・クリックのシミュレートは、ボタンが押されたときに実行される機能を抽象化する、つまりPerformClickメソッドがその機能を実行するための「窓口」(=一般的な意味でのインターフェイス)となって具体的な内部動作や内部構造を隠ぺいするのに役立つ。これにより次のようなメリットが生まれてくる。
1. ボタンが押されたときの詳しい内部動作を知る必要がなくなる。
本稿の例では、ボタンが押されたときの機能として、ボタンの色を変更するためのSetRandomBackColorメソッドを呼び出さなければならないが、その機能を利用するフォームなどの外部クラスは、ボタン・クリックをシミュレートすれば(=PerformClickメソッドを利用すれば)、そこで実行される機能の内部仕様(ボタンの色を変更するためにSetRandomBackColorメソッドを呼び出すこと)を知る必要がなくなる。
2. そのため、ボタンが押されたときの機能仕様が変更されても、その利用方法を変える必要がなくなる。
例えばボタンが押されたときに、背景色(BackColor)ではなく文字の色(ForeColor)が変化するように機能仕様を変更するとしても、CustomButtonクラスのClickイベント・ハンドラ内で呼び出すメソッドをSetRandomBackColorメソッドから、SetRandomForeColorメソッド(仮のメソッド名。文字の色を変えるためのメソッド)に変更するだけで、その機能を利用するフォームなどの外部クラスではその利用方法を変える必要がない。つまり、ボタン・クリックをシミュレートする(PerformClickメソッドを利用する)方のコードは何も変更する必要がない。
ボタン・クリック時に実行される機能の「窓口」を実現する手段はいくつか考えられるが、.NET Frameworkにあらかじめ用意されているこのPerformClickメソッドを使えば手軽で便利だ。
カテゴリ:Windowsフォーム 処理対象:Buttonコントロール カテゴリ:Windowsフォーム 処理対象:RadioButtonコントロール 使用ライブラリ:Buttonコントロール 使用ライブラリ:RadioButtonコントロール 使用ライブラリ:MenuItemクラス(System.Windows.Forms名前空間) 関連TIPS:乱数を生成するには? |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|