none
ソフトキーボードのテンキー表示について RRS feed

  • 質問

  • 現在,C#でWindows8.1向けのWindowsフォームアプリケーションを開発しています。

    この中でテキストボックスを選択時にソフトキーボード(テンキー)を表示させたいニーズがあり,テキストボックスのInputScopeプロパティを変更すれば実現可能なことが分かりました。

    ところがWindowsフォームアプリケーションではtextboxのInputScopeプロパティがデフォルトでは存在せず,困っております。

    どのライブラリを参照すればよいかご教授下さい。

    またライブラリが存在しない場合はどのような方法でソフトキーボード(テンキー)を表示させることが出来るのかご教授下さい。

    よろしくお願いします。

    2015年2月18日 23:36

回答

すべての返信

  • こんにちは。
    経験が無いので、以下は少し調べての見解です。

    https://msdn.microsoft.com/ja-jp/library/system.windows.controls.textbox.inputscope(v=vs.110).aspx
    InputScopeはWindowsPhone向けとされているようなので使えないのではないでしょうか。

    以下の方法でソフトウェアキーボードが表示できます。
    https://social.msdn.microsoft.com/Forums/netframework/ja-JP/f9b712da-b46c-4a7d-a988-6367517fb0da/windows8textbox?forum=wpfja

    しかし、ご要望はテンキーとのことなので、以下のようにカスタマイズしたソフトウェアキーボードを作成する方針になるのではないかと思っております。
    http://www.moonmile.net/blog/archives/3315

    • 回答の候補に設定 星 睦美 2015年2月27日 1:16
    • 回答としてマーク Yu_Ino 2015年11月14日 8:47
    2015年2月19日 0:16
    モデレータ
  • ところがWindowsフォームアプリケーションではtextboxのInputScopeプロパティがデフォルトでは存在せず,困っております。

    基本的にはWindowsフォームアプリケーションの進化は止まっていると考えた方が良いと思います。よって、比較的新しい機能は、WPFやストアアプリ、Windows Phone向けになります。Windowsフォームで開発される場合は、その辺りを考慮して下さい。
    よって、ご質問のようにInputScopeも無いわけですが、WindowsフォームからWPFのコントロールを以下のようにして使用することができます。多くのTextBoxで同様のことをしたい場合には、ユーザーコントロールにしてしまえば楽ですし、ソフトウエアキーボードの実装忘れがありません。ユーザーコントロールにソフトウエアキーボードを出す出さない等のプロパティを持たせて制御できるようにしておいても良いでしょう。

    WindowsフォームでWPFコントロールを利用するには?[3.0、3.5、VS 2008、C#、VB]
    http://www.atmarkit.co.jp/fdotnet/dotnettips/800wpfonwinform/wpfonwinform.html

    ただ、今回の場合は仕様をよくお聞きしていませんが、Windowsフォームの画面でテンキーのソフトウエアキーボードを作成し、それを利用して入力する方法が良いかもしれません。これですと、例えば0が一度に3つ入るボタンを作成したり、自由自在です。よく、マスターから商品を検索して指定するのを別ダイアログで行ったりしますが、それがソフトウエアキーボードに変わっただけです。
    また、ソフトウエアキーボードですと、位置によってはソフトウエアキーボードがTextBoxに覆いかぶさることもありそうです。Windowsフォームで作成したテンキーであれば、電卓のようにそこに入力した数字を表示させておき、決定でTextBoxに転送することにより、覆いかぶさることを心配する必要はありません。
    おそらくご質問から、タブレット向けではなく、通常はキーボードとマウスで操作されるのではないかと思いましたので、このようなことも考えました。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 星 睦美 2015年2月27日 1:16
    2015年2月19日 1:52
    モデレータ
  • フォーラム オペレーターの星 睦美です。
    hinkan さん、こんにちは。

    投稿の質問にユーザーからの返信がありますので、引き続き質問がありましたら返信いただければと思います。
    参考になりましたら投稿者からの[回答としてマーク] をお願いします。

    フォーラムのご利用方法、ヘルプ、回答のガイドラインに関するお知らせ:


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2015年2月27日 1:15
  • こんにちは

    テンキー付のOSK(OnScreenKeyboard)でもよければ、Tak1waさんの方法でOSKを呼び出せますよね。

    で、レジストリ HKCU\Software\Microsoft\Osk の ShowNumPad が1であればテンキーが表示されます。
    なので、事前にレジストリを修正してから起動するか、ユーザーさんに修正を促すか(OSKの画面のOptionボタンでテンキーを表示させることができます)のいずれかを行う というのではいかがでしょうか?

    2015年2月27日 2:45
  • 今更ですが、WPF で、こんなサンプルをみかけたので投稿しておきます。

    Automatic Touch Keyboard for TextBoxes in WPF Applications on Windows 8+

    まあテンキー表示への切替はできなさそうですが・・・。

    2015年2月27日 9:09
  • ご連絡が遅くなり申し訳ありません。

    ご教授いただいたの中で、ソフトウェアキーボードを作成する方法で解決できました。

    ありがとうございました。

    2015年11月14日 8:49
  • 古いスレッドですが、このスレッドを参照元とされていた事例があったので、今更ながら情報を足しておきます。

    WPF の InputScope プロパティ相当の制御ができそうなものとして、TSF(Text Services Framework) の SetInputScope 関数 があります。
    即座にソフトキーボード表示の効果があるかはわかりませんが、ソフトキーボード表示時に数値入力モードにさせることはできるようです。

    public Form1()
    {
        InitializeComponent();
    
        SetInputScope(textBox2.Handle, 29);
    }
    
    [DllImport("Msctf.dll", PreserveSig = false)]
    private static extern void SetInputScope(IntPtr handle, int inputScope)
    SetInputScope の第 2 引数は、本当は enum なのですが、かなり種類が多いので int 型でだまし込んで、29 = IS_NUMBER を指定しています。
    これにより、textBox2 へとフォーカスを当てたと時に数値入力モードのソフトキーボード表示になることを確認しています。
    (Windows 10 Ver1607 において)
    2016年8月16日 7:48
    モデレータ