私はobservablesを使用してkeydownイベントを処理しています。 消費者が実際に処理した場合は、常に扱いの鍵を設定するオブザーバブルを公開したいと思います。 これは可能ですか?ここでRX - 被験者が基準を満たしている場合にのみコードを実行する
は、私が今扱っキーを設定する方法の例です:
KeyDown.Where(e => e.Key == Keys.W)
.Subscribe(e => { Console.WriteLine(e.Key); e.Handled = true; });
ここで扱わプロパティは自動的にその後設定された場合、私はちょうどキーの代わりKeyDownEventArgsを公開することができ(私はそれを行うしたいと思います方法の例ですあまりにも):
HandledKeyDown.Where(k => k == Keys.W).Subscribe(k => Console.WriteLine(k));
ここに私が試したものです:
HandledKeyDown = Observable.Create<Key>(observer => {
var keys = KeyDown.Subscribe(e => { e.Handled = true; observer.OnNext(e.Key); });
return() => keys.Dispose();
});
T消費者が実際に処理したかどうかにかかわらず、キーは常に処理されるように設定されるということです。
コードがサブスクライブ方式に「到達」しているかどうかを知る方法はありますか?
あなたのコードは 'e.Handled'プロパティをtrueに設定します。私は、消費者が実際にそれを処理したと言う論理をOPが望んでいたことを理解しました。これを容易にするには、アクションの署名を 'Func'に変更する必要があります。 –
Enigmativity
私の解釈では、加入者がイベントを受け取って「処理した」ときは、「コードが「subscribeメソッドに達したかどうかを知る方法はありますか?そして彼は加入者がより複雑な 'KeyEventArgs'ではなく単純な' Keys'を受け取ることを望んでいます。 – yamen
これは私が欲しかったものを正確に(最後の部分を必要としなかった、あなたは初めてそれを釘付けにした)。どのように私はそれに尋ねてはならないのか分かりませんが、3人のうち2人が質問を誤解したのは私のせいです。とにかく、ありがとう。 – user974608