オンスクリーンキーボードと同様に、仮想数字パッドを作成します。どのように私はそれにボタンを押すと、フォームを活性化/フォーカスされていることを防ぐために、SendKeys.Sendコールは、正しいフォームに行く?私はこれに対して管理されていないAPIを使用しなければならないと確信していますが、それ以外にもどこから始めるべきかはわかりません。助けてくれてありがとう!仮想数字パッドの作成:フォームのアクティブ化/フォーカスの停止を
答えて
あなたは、フォームが保護CreateParamsをプロパティをオーバーライドすることによって作成された方法で制御できます。
int WS_EX_NOACTIVATE = 0x08000000;
cp.ExStyle = cp.ExStyle | WS_EX_NOACTIVATE;
WS_EX_NOACTIVATE
スタイルは、マウス入力を防止:私は次のスタイルをしようと提案し
protected override CreateParams CreateParams {
get {
var cp = base.CreateParams;
// Configure the CreateParams structure here
return cp;
}
}
をウィンドウをフォーカスしないようにします(たとえば、これを使用してツールチップのようなウィンドウを作成できます)。
これを他のスタイル(WS_EX_TOPMOST
など)と組み合わせて、後の動作を取得できます。
フォーカスを持たないフォームは、通常、キーボード入力を受けません。だから私はあなたがこれをどのように働かせるかわからない。
あなたが書き込むアプリケーションで数字パッドが機能する必要があるだけの場合、フォーカスを持っている最後の有効な入力コントロールを追跡することができます。そうすれば、フォーカスを盗む何かを心配する必要はありません。私は最近、TextBoxesのEnterイベントを、送信側パラメータにフォーカスを当てたコントロールハンドルを設定した同じイベントハンドラに登録することで、何か似たようなことをしました。この正確な方法はあなたのためにはうまくいかないかもしれませんが、アプローチが簡単になるかもしれません。
あなたが書くアプリケーションでは、Observerパターンを考慮してください。
一般的に、デリゲートを取るサブスクリプションメソッドをキーパッドに追加することができます(購読解除も可能です)。キープレスイベントの処理では、登録されたすべてのデリゲートをループして文字コードを送信します。
コード(主にメモリから、スニペットはおそらくコンパイルされませんが、あなたが軌道に乗る必要があります)お使いの場合には
delegate void KeyPadSubscription (char keyPressed);
List<KeyPadSubscription> subscriptions;
void KeyPress (object sender, KeyPressArgs e)
{
foreach (KeyPadSubscription sub in subscriptions)
sub (e.CharCode)
}
void Subscribe(KeyPadSubscription s)
{
subscriptions.Add(s);
}
void Unsubscribe(KeyPadSubscription s)
{
subscriptions.Remove(s);
}
、あなたはおそらく、デリゲートのリストを必要としないと財産で十分でした。フォームがフォーカスを変更すると、アクティブなフォームはそのメソッドをキーパッドの代理人として設定します。
void MyForm_Activated(...)
{
//assumes keypad is global or static
KeyPad.Subsribe (this.HandleKeyPadPress)
}
- 1. 仮想モニタ/仮想ディスプレイデバイスの作成
- 2. テーブルを使ってオウレリア・仮想仮想化を作成する
- 3. 仮想キーでタイマーを停止する
- 4. 仮想ファイルシステムメモリブロックの作成
- 5. 仮想ディスクマウントポイントの作成
- 6. Uniformgridの仮想化
- 7. 仮想PHPフォーム
- 8. javascript/jquery:仮想フォームの作成と投稿
- 9. ブートストラップnavbarドロップダウンの動作リンクバックグラウンドカラーのアクティブ化を停止する方法
- 10. 仮想ディスクの作成とフォーマット
- 11. Eclipse仮想ファイルリソースの作成方法
- 12. 仮想チェンジ・ファイルの作成方法は?
- 13. WPFツールチップの仮想化
- 14. WPFキャンバスの仮想化
- 15. IISが仮想ディレクトリ内のファイルを提供するのを停止します。
- 16. 仮想関数オーバーライド仮想関数
- 17. プログラムによるレジストリ仮想化の禁止
- 18. 数字パッド用のresignFirstResponder
- 19. Winrt GridView仮想化
- 20. WPFデータ仮想化
- 21. WPFカスタムレイアウト/仮想化
- 22. WPFツリービュー仮想化
- 23. 仮想MIDIポートを作成する
- 24. 仮想マージグループを作成する
- 25. 仮想ホストを作成するCent OS
- 26. "仮想" ScrollableControlを作成しますか?
- 27. Python:仮想インポートパスを作成する
- 28. 仮想モニタ(ディスプレイデバイス)を作成する
- 29. 仮想フォームとAjax POST
- 30. 仮想マシンを自動化
これは、_any_アプリケーション(タブレットの仮想キーボードのような)で動作するキーボード用であるか、あなたが作成するアプリケーション用ですか? –
私が書くアプリのみ。私はWndProcメソッドをオーバーライドしてmessage.ResultをMA_NOACTIVATEに設定しましたが、ボタンをクリックしてもまだフォームにフォーカスが得られているようです。 –