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です。

よく使うコントロール