GUIフォームプログラミング
イベントドリブンプログラミングを理解する
C言語ではmain関数を機転に処理をたどって行くことができますが、昨今のGUIプログラミングでは、イベントドリブン(イベント駆動型)が主流です。つまり、「イベント」が発生したときに~な処理をする処理の繰り返しになります。
GUIにおけるイベントとは
- キー入力
- マウスの動き(クリック、動き、場所)
- ウィンドウ(フォーム)の出現
などです。コードウィンドウの上部にはオブジェクト毎にイベントに応じたメソッド(関数)を記述するメニューがあり、左側でオブジェクト、右側でイベントを選ぶとそれに対応したメソッド(関数)が自動生成されます。下記の例では、Activateというフォームがアクティブになったときに呼ばれるメソッドについて記述しています。すべてのイベントを理解しておく必要はありませんが、ざっと眺めておくと面白いアイデアが出てくるかもしれません。使い方は適時ググリましょう。
キーイベントの活用方法
KeyDownイベントでは押されたキーのアスキーコード(変数KeyCode)が送られてきます。下記のようにすれば入力されたキーに応じた処理の分岐をすることが可能です。
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 74 Then
MsgBox "Jが押されました"
End If
End Sub
キー入力イベントのノウハウメモ
- 初期状態においてキー入力をOFFするには→ TabStopプロパティをOFFにする
モーダルとモードレス
フォームをShowメソッドで表示する時には
- モーダル(呼び出されたウィンドウにUIの制御がいく。他のウィンドウにUI制御できない)
- モードレス(呼び出されたウィンドウにUIの制御が移らない)
という2つのモードがあります。通常、Showメソッドではモーダルとしてフォームを表示します。モードレスで表示したい場合は下記のように呼び出せばOKです。(下記の例ではボタンを押したときに2つのフォームを同時に表示します)
Private Sub CommandButton1_Click()
UserForm2.Show vbModeless
UserForm3.Show vbModeless
End Sub
注意事項
上記のコードを実行すると「モーダルフォームからモードレスフォームを呼び出せない」というエラーが出ます。これは最初に呼ばれるフォームがモーダルで呼ばれていることが原因です。
(解決策)
元のフォームのプロパティにShowModal というパラメータがあり、値がTrueになっています。これをFalseに変えればOKです。