コントロール毎にいろいろなテクニックをまとめてみる以外にも使えるテクニックを系統問わずにメモをしておく。
まとまるまで待っていると忘れてしまうために・・・。ww
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■
【フォーカスを移す】
VisualBasic5 or 6系ではフォーカス遷移にSetFocus イベントでカーソルを動かしてきましたが、.NETでは[オブジェクト名].Focus()と表記するようになりました。
日本では昔から業務プログラムにおいて「Enter」キーで次項目へのカーソル移動が一般的なまま文化が進んできています。以前よりはだいぶ言われることは少なくなりましたが、海外でのカーソル遷移に「Tab」キーを利用する考え方は一般的とは言いがたいものがあります。
ブラウザ系の業務アプリが増えて「Tab」での移動はありますが、UI系の業務アプリではまだまだ「Enter」キーの要求は根強い要望です。
そこでEnterキーからフォーカスの遷移のサンプルを記載します。
Private Sub Form_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown '現在アクティブなコントロールを取得する Dim c As Control = Me.ActiveControl Try '受け取ったキーで処理を判別 Select Case e.KeyValue Case Is = Keys.Up, Keys.Left 'フォーカスの移動 Me.SelectNextControl(ActiveControl, False, True, True, True) Case Is = 13, Keys.Right, Keys.Down '[Enter]or[→]or[↓]を押された 'オブジェクト名別の処理分岐 Select Case c.Name Case Is = [オブジェクト名] Case Else 'フォーカスの移動 Me.SelectNextControl(ActiveControl, True, True, True, True) End Select Case Is = 112 '[Button_F1]を押された Call Button_F1.PerformClick() Case Else strActiveObject = c.Name End Select Catch ex As Exception Finally 'カーソルを戻す Me.Cursor = Cursors.Default End Try End Sub
このサンプルでは「↓キー」と「→キー」と「Enterキー」を押すと現在フォーカスされているオブジェクトの次のTabIndexを持つオブジェクトにカーソルが遷移されます。また、「↑キー」と「←キー」を押すと現在フォーカスされているオブジェクトの前のTabIndexを持つオブジェクトにカーソルが遷移されます。つまり逆ですね。
これをキーダウンイベント処理からもらえる「Me.ActiveControl」と「e.KeyValue」を利用して押されたキーと現在のフォーカス元を判断して処理を遷移させることで動作を実現できるようにしています。
途中のキーコード=112(F1キー)を押すイベントも記載していますが、このF1を押すことによって、フォーム上のボタンオブジェクトである「Button_F1」をマウスでクリックしたと同じことを実現できるようにしています。
このように業務アプリで使用できそうなものを五月雨に記録しておく。