こんにちは。
WPFのapplicationを作っています。
###前提・実現したいこと
xamlでTextBoxを配置し、そこにFocusしたらsoftware keyboardを表示し、入力できるようにしようと考えました。
###発生している問題・エラーメッセージ
http://sturnus.hateblo.jp/entry/2014/08/10/025238
でsoftware keyboardを入手、sourcecodeに組み込みました。
C#
1KeyBoardWindow key = new KeyBoardWindow(); 2 3textbox.GotFocus += Textbox_GotFocus; 4textboxbox.LostFocus += Textbox_LostFocus; 5 6private void Textbox_GotFocus(object sender, RoutedEventArgs e) { 7 key.Show(); 8} 9 10private void Textbox_LostFocus(object sender, RoutedEventArgs e) { 11 key.Hide(); 12} 13
このコードで、MainWindowから呼び出してsoftwarekeyboardを表示できるようになりました。
ところが、そのsoftwarekeyboardは、たとえば外部のメモ帳には文字入力できるのですが、MainWindowのTextboxには文字入力できないのです。
どうしたら自分自身のMainWindowのTextboxに文字入力できるようになるのでしょう?
C#
1 //ウインドウをアクティブにしない--------------------------------------- 2 [DllImport("user32.dll")] 3 private static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 4 5 [DllImport("user32.dll")] 6 private static extern int GetWindowLong(IntPtr hWnd, int nIndex); 7
というようなところがあり、
C#
1 protected override void OnSourceInitialized(EventArgs e) 2 { 3 base.OnSourceInitialized(e); 4 5 var helper = new WindowInteropHelper(this); 6 SetWindowLong(helper.Handle, GWL_EXSTYLE, GetWindowLong(helper.Handle, GWL_EXSTYLE) | WS_EX_NOACTIVATE); 7 } 8
という処理をしています。
softwarekeyboardのWindowをActiveにする処理の問題なのかなと思います。
C#
1 // var helper = new WindowInteropHelper(this); 2// SetWindowLong(helper.Handle, GWL_EXSTYLE, GetWindowLong(helper.Handle, GWL_EXSTYLE) | WS_EX_NOACTIVATE); 3 4``` のようにコメントアウトしましたが、MainWindowのTextboxには文字入力できない状況には変化がありませんでした。 5 6アドバイスよろしくお願いします。 7 8###補足情報(言語/FW/ツール等のバージョンなど) 9Microsoft Visual Studio Community 2015 10 Version 14.0.25424.00 Update 3 11 Microsoft .NET Framework 12 Version 4.6.01038 13 14インストールされているバージョン:Community 15 16Visual C# 2015 00322-20000-00000-AA575 17 Microsoft Visual C# 2015 18 19です。 20 よろしくお願いします。