SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(InputMan)

デスクトップでもタッチしたい
「InputMan for Windows Forms 7.0J SP1」でのタッチ対応に迫る

  • このエントリーをはてなブックマークに追加

タッチキーボードを制御(CZ1304TouchKeyBoard)

 Windows 8には、物理的なキーボードがないデバイス(例えばタブレットなどのスレートPC)用に、タッチ用ソフトウェアキーボードが標準装備されています。GcImeコンポーネントには、このソフトウェアキーボードの表示制御機能も組み込まれています。

 GcImeコンポーネントでソフトウェアキーボード表示制御を行う方法は2通りあります。1つはGcImeコンポーネントが各コントロールに追加する「AutoShowSoftKeyBoard」プロパティ、もう一つはShowTouchKeyboardメソッド/HideTouchKeyboardメソッドによる明示的な制御です。

リスト1 ソフトウェアキーボードの表示
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の仕様で、いずれの方法でもスクリーンキーボードを表示させることはできません。

図5 ソフトウェアキーボードの表示例
図5 ソフトウェアキーボードの表示例

タッチによる選択範囲指定のサポート(CZ1304Gripper)

 スマートフォンで文字入力を行ったことのある人にはおなじみともいえる機能が、文字の選択範囲を操作するときのグリッパー表示でしょう。グリッパー表示は文字列の選択範囲の始点と終点に〇印(グリッパー)を表示し、グリッパーをタッチ操作することで選択範囲の変更を容易にします。

図6 グリッパーの表示例
図6 グリッパーの表示例

 InputManの入力コントロールであれば、どのコントロールであってもShowGrippersプロパティをTrueにすることで、タッチ操作で文字を選択しようとすれば自動的にグリッパー表示を行う設定が可能です。

 ShowGrippersプロパティのデフォルト値はTrueなので、特にプロパティ値を変更する必要がないという点も効率的な開発に寄与します。なぜならば、実際に操作を行ってみるとグリッパーがない状態でのタッチ操作による文字列一部選択などは至難の業であり、グリッパー表示は必須ともいえる機能であると実感できるからです。

 また、ShowGrippersプロパティがTrueであっても、タッチ操作ではなくマウス操作やキーボード操作で文字列選択を行ったときはグリッパー表示が行われません。これは従来の操作時には従来の動きを行うことで「なんか変なマークが表示される」というクレーム防止に役立ちます。

図7 マウス操作によるグリッパーの非表示例
図7 マウス操作によるグリッパーの非表示例

タッチで選択しやすい工夫(CZ1304DropDown)

 InputManのコントロールにはドロップダウン表示を伴うものがいくつかあります。

  • GcTextBox(テキスト)コントロール
  • GcComboBox(コンボボックス)コントロール
  • GcMask(マスク)コントロール
  • GcPostal(郵便番号)コントロール
  • GcDate(日付)コントロール
  • GcDateTime(日時)コントロール
  • GcNumber(数値)コントロール
  • GcRichTextBox(リッチテキスト)コントロール

 これらのコントロールには、TouchDropDownScaleプロパティという標準コントロールにはないプロパティが存在して、デフォルト値として「150%」が設定されています。

図8 TouchDropDownScaleプロパティ
図8 TouchDropDownScaleプロパティ

 このプロパティはタッチ操作によりドロップダウン表示を行った際、ドロップダウン表示の一覧から項目を選択しやすいように、項目間の間隔を標準コントロールの間隔の「150%」に広げてくれます。

図9 タッチ操作によるドロップダウン表示例
図9 タッチ操作によるドロップダウン表示例

 なお、あくまでも項目間の間隔を拡大するだけで、文字の大きさは変わらない点に注意してください。間隔拡大だけでもタッチの操作は容易になりますし、ドロップダウン時だけ文字の大きさも変えてしまうと、コントロールの横幅に収まる文字数が変わるといった影響が発生することになります。この機能設計はなかなか合理的だといえるでしょう。

 また、この機能もタッチ操作を行ったときにだけ有効になります。ですから、マウス操作やキーボード操作でドロップダウン表示を行ったときの項目間の間隔は標準コントロールと互換性があります。しかしながらマウス操作であっても、項目間の間隔が広い方が使いやすいと感じる方もいると思います。そのため、今回の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」を使って効率的にタッチ対応を行い、使いやすいデスクトップアプリを構築していただきたいと思います。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(InputMan)連載記事一覧

もっと読む

この記事の著者

初音玲(ハツネアキラ)

 国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。 個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。 Microsoft MVP for Windows Development ブログ:http://hatsune.hatenablog.jp/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7126 2016/03/29 17:38

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング