2011-10-24 8 views
0

ユーザ入力の検証に最適な場所は、エントリタイプのウィジェットのフォーカスアウトイベントハンドラです(これは私の考えです)。私はフォーカスを次のコントロールに移して現在のウィジェットに焦点を当てるのを避けるという考えでフォーカスアウトイベントからTRUEを返そうとしますが、これはOKではありません(必要に応じて動作しません)。Gtkがフォーカスアウトを抑制する

妥当性検査が成功しなかった場合に、次のコントロールへの転送を抑止する適切な方法、およびそのようなウィジェット(gtkEntry、gtkSpinButtonなど)に検証コードを入れる場所は両方ともマウスで呼び出された信号で使用できるようにするキーボード操作?

答えて

2

これはほとんど問題ではありません。フォーカスは常にユーザーが所有する必要があります。すなわち、ユーザは、どこにでも合焦させることができるはずである。フォーカスを指示しようとしたり、想像できるロジックに基づいてフォーカスを移動しようとしないと、あなたはおそらくそれらを挫折させます。

確かに私を挫折させるでしょう!たとえば、ボックスに間違ったデータを書き込んだとしたら、「ちょっと、間違っています!その上のデータを選択してコピーして、ここに貼り付ける」と言います。しかし、このプログラムでは、受け入れ可能なデータを書かずに私が今どこにいても箱から出ることができないので、私はそれを行うことができません。私は間違ったデータを削除して何かを入力しなければならない...ちょうど良くない。

ユーザーエントリを検証する最も良い方法は、実際に何かを行うときです。あなたがそれを保存するとき、またはそれを有効にするとき。その後、エラーがあることをポップアップして、それが近いときにフォーカスを最初のエラーに移動することもできます。

あなたが間違っているという早期警告の恩恵を受けると感じる場合は、色を使用することができます(エラーがあれば黄色/赤色に塗りつぶします)、またはボックスの隣に小さなエラーアイコンを追加します。それは、周りの焦点を動かすよりも邪魔になることがないwaaaayです。

+0

私は、ほとんどのシナリオで、最終的なアクション(「保存」)前に全体的な検証を行う方が良いと考えていますが、入力を制御して制限する必要があるケースがあります。その場合、入力は「範囲内」でなければならず、そうでなければウィジェットは有効なデータが入力されるまでフォーカスを保持する必要があります。それで、どうやって、必要ならばフォーカスを前進させないでください。 –