5

ノードとチェックボックスを使用した TreeView の作成に関する質問に最近回答しました。

treeviewユーザーが押したときに のノードがチェックされたときに、ケースを適切に処理する方法を考えていたときに、通知spacebarに遭遇しました。TVN_KEYDOWN

私のソリューションは、ダイアログ ボックスとウィンドウ プロシージャでテストされ、どちらも問題なく動作するようです。

それでも、返された結果がどうあるべきかというジレンマがあります。のドキュメントからの関連する抜粋を次に示しますTVN_KEYDOWN

戻り値

lParam の wVKey メンバーが文字キー コードの場合、その文字はインクリメンタル検索の一部として使用されます。インクリメンタル検索から文字を除外するにはゼロ以外を返し、検索に文字を含めるにはゼロを返します。他のすべてのキーの場合、戻り値は無視されます。

が押されたかどうかをテストするときに両方の結果を返そうとしましspacebarたが、違いに気づきませんでした。

そこで、次の質問をします。

  1. インクリメンタル検索とは何か説明してもらえますか?

  2. spacebarテスト対象の文字 ( ) をインクリメンタル検索に含めたり除外したりした場合の違いは何ですか?

編集:

最初の質問に対する答えを見つけたようです。インクリメンタル検索とは何かを説明するWikipediaの記事を見つけました。

残りは 2 番目の質問のみです。

編集の終わり

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

よろしくお願いします。

4

2 に答える 2

4

巨大な TreeView で最もよく見えます。その最も良い例は、Regedit.exe の左側のパネルです。HKCR を展開し、入力を開始して効果を確認します。

実装は Windows のバージョン間で変更されており、以前は XP ではあまり使い物になりませんでした。これは UI の大失敗です。ユーザーが文字の入力ミスを確認したり、入力ミスを修正したり、検索が最初から開始されたことを確認したりする良い方法はありません。現在のバージョンの Windows ではタイムアウトが使用されており、数秒間キーを押さないと、部分的に入力された検索フレーズが自動的にリセットされます。これは、ほぼ実用的です。確かに便利ですが、あまり使い物になりません。

TVN_KEYDOWN で行うべき唯一の正気のことは、何もしないことです。現状よりも予測しにくくする方法をこれ以上追加しないでください。もちろん、意図的にキーストロークを飲み込むと、それがユーザーが本当に使いたかったキーである場合、使い物にならなくなります。もちろん、スペースを飲み込みたくはありません。もちろん、これはツリー ノード テキストでは有効な文字です。ツリーにスペースを含むテキストを含むノードがない場合でも、それを飲み込みたくはありません。コントロール自体は既にそうしています。

収集された増分検索文字列も渡すか、それをリセットする方法を提供する場合、通知ははるかに便利でした. 橋の下の水はそうではありません。ある種のユーザビリティ トラップを作成した場合は、それを処理することを検討してください。実用的な例を思い付くのは非常に困難です。あなたがそれを見るとき、あなたはそれを知っています。

唯一の実際の使用法は、検索機能を完全に置き換えることです。次に、独自のルールを作成し、自分でノードを選択します。もちろん、常にゼロ以外の値を返します。

于 2014-03-19T10:39:03.633 に答える