タッチキーボードを制御(CZ1304TouchKeyBoard)
Windows 8には、物理的なキーボードがないデバイス(例えばタブレットなどのスレートPC)用に、タッチ用ソフトウェアキーボードが標準装備されています。GcImeコンポーネントには、このソフトウェアキーボードの表示制御機能も組み込まれています。
GcImeコンポーネントでソフトウェアキーボード表示制御を行う方法は2通りあります。1つはGcImeコンポーネントが各コントロールに追加する「AutoShowSoftKeyBoard」プロパティ、もう一つはShowTouchKeyboardメソッド/HideTouchKeyboardメソッドによる明示的な制御です。
Public Class MainForm Private Sub Show_TextBox_Enter(sender As Object, e As EventArgs) Handles Show_TextBox.Enter Me.GcIme1.ShowTouchKeyboard() End Sub Private Sub Show_TextBox_Leave(sender As Object, e As EventArgs) Handles Show_TextBox.Leave Me.GcIme1.HideTouchKeyboard() End Sub End Class
GcImeコンポーネントによるソフトウェアキーボード表示制御で注意しなければならないのが、AutoShowSoftKeyBoardプロパティによる制御です。ヘルプファイルによると、コントロールのAutoShowSoftKeyBoardプロパティをTrueにした場合、そのコントロールが入力欄になったときに自動的にソフトウェアキーボードを表示すると説明があります。しかし、この機能はIMEパッドにソフトキーボード機能が付随するWindows XPやWindows Server 2003のみ有効の機能であるため、Windows Vista、Windows 7およびWindows 8ではいくらTrueに設定しても無視されてしまいます。
タッチキーボードに変更されているWindows 7以降で表示制御を行うには、ShowTouchKeyboardメソッド/HideTouchKeyboardメソッドで実現しなければなりません。タッチキーボードの場合はInputScopeプロパティの値に合わせて、表示されるキーボードのレイアウトが最適化されているためより使いやすいUIが実現できます。
なお、Windows VistaではOSの仕様で、いずれの方法でもスクリーンキーボードを表示させることはできません。
タッチによる選択範囲指定のサポート(CZ1304Gripper)
スマートフォンで文字入力を行ったことのある人にはおなじみともいえる機能が、文字の選択範囲を操作するときのグリッパー表示でしょう。グリッパー表示は文字列の選択範囲の始点と終点に〇印(グリッパー)を表示し、グリッパーをタッチ操作することで選択範囲の変更を容易にします。
InputManの入力コントロールであれば、どのコントロールであってもShowGrippersプロパティをTrueにすることで、タッチ操作で文字を選択しようとすれば自動的にグリッパー表示を行う設定が可能です。
ShowGrippersプロパティのデフォルト値はTrueなので、特にプロパティ値を変更する必要がないという点も効率的な開発に寄与します。なぜならば、実際に操作を行ってみるとグリッパーがない状態でのタッチ操作による文字列一部選択などは至難の業であり、グリッパー表示は必須ともいえる機能であると実感できるからです。
また、ShowGrippersプロパティがTrueであっても、タッチ操作ではなくマウス操作やキーボード操作で文字列選択を行ったときはグリッパー表示が行われません。これは従来の操作時には従来の動きを行うことで「なんか変なマークが表示される」というクレーム防止に役立ちます。
タッチで選択しやすい工夫(CZ1304DropDown)
InputManのコントロールにはドロップダウン表示を伴うものがいくつかあります。
- GcTextBox(テキスト)コントロール
- GcComboBox(コンボボックス)コントロール
- GcMask(マスク)コントロール
- GcPostal(郵便番号)コントロール
- GcDate(日付)コントロール
- GcDateTime(日時)コントロール
- GcNumber(数値)コントロール
- GcRichTextBox(リッチテキスト)コントロール
これらのコントロールには、TouchDropDownScaleプロパティという標準コントロールにはないプロパティが存在して、デフォルト値として「150%」が設定されています。
このプロパティはタッチ操作によりドロップダウン表示を行った際、ドロップダウン表示の一覧から項目を選択しやすいように、項目間の間隔を標準コントロールの間隔の「150%」に広げてくれます。
なお、あくまでも項目間の間隔を拡大するだけで、文字の大きさは変わらない点に注意してください。間隔拡大だけでもタッチの操作は容易になりますし、ドロップダウン時だけ文字の大きさも変えてしまうと、コントロールの横幅に収まる文字数が変わるといった影響が発生することになります。この機能設計はなかなか合理的だといえるでしょう。
また、この機能もタッチ操作を行ったときにだけ有効になります。ですから、マウス操作やキーボード操作でドロップダウン表示を行ったときの項目間の間隔は標準コントロールと互換性があります。しかしながらマウス操作であっても、項目間の間隔が広い方が使いやすいと感じる方もいると思います。そのため、今回の7.0J SP1では実装されていませんが、マウス操作でもドロップダウン表示の項目間の間隔を変更できる機能があると、さらに使いやすさが向上するのではないでしょうか。
MultiRowへの展開について
InputManでのタッチ操作時の機能追加を知ってしまうと、表形式でデータ入力を行うときにも同じような操作性を実現したいと思えてきます。
今回は詳しく触れませんが、そのようなときにお勧めなのが、「MultiRow for Windows Forms 7.0J SP1」です。
「MultiRow for Windows Forms 7.0J SP1」には、ズーム操作やスクロール操作のタッチ対応、InputManと同様の
- InputScopeプロパティによるIME入力モード制御
- グリッパー表示
- ドロップダウン時の項目間隔の拡大
など基本的な部分でのタッチ対応だけではなく、「InputMan for Windows Forms 7.0J SP1」をセル型として指定できるInputManCellもあります。
このようにInputMantとMultiRowを組み合わせることで、Windowsフォームで業務アプリを作成するときに必要な、ほぼすべてのデザインをタッチ対応にすることができます。
まとめ
InputManのコントロールでのタッチ操作機能を実体験してみると、Windowsフォームであったとしても、タッチに対する対応は必要不可欠であり「Windowsストアアプリじゃなくてデスクトップなのだから、従来の操作性だけ意識すれば問題ない」というのが手抜きのように思えてくるでしょう。そして、TouchDropDownScaleプロパティのように、マウス操作になれていない利用者が操作するときに適用したいと感じる機能もあります。
そういったことも含め、タッチ操作による操作性を考えることは、年齢などのさまざまな要素を加味した使いやすいデザイン(ユニバーサルデザイン)にも通じるということが見えてきます。
ぜひ、「InputMan for Windows Forms 7.0J SP1」を使って効率的にタッチ対応を行い、使いやすいデスクトップアプリを構築していただきたいと思います。