2009-06-17 7 views
1

私はNumericUpDownを含むコントロールを持っています。コンテナにフォーカスがあるときにのみ、アップダウンが表示されるため、コンテナを選択可能にする必要があります(または、フォーカスを受け取ることができない場合)。私は、タブオーダーに関してコントロールが単一のエンティティとして動作するようにしたい。つまり、ユーザーがコントロールに移動すると、それはアップダウンを示し、アップダウンはフォーカスされています。ユーザーがアップダウンから離れると、コントロールから離れたタブのようになります。コンテナコントロールの前のコントロールを選択するにはどうすればよいですか?

最初の部分を達成するのは簡単です。コンテナのOnEnterでは、私はアップダウンをフォーカスします。ユーザーが移動せずにタブ移動すると、タブ順序の次のコントロールが正しいので、うまくいきます。ただし、タブオーダーでのupdownへの以前のコントロールは選択可能でなければならないため、コンテナです。したがって、ユーザがシフトダウンしてアップダウンから離れると、コンテナが選択され、したがって、アップダウンが再び選択される。

ユーザーがシフトダウンしてアップダウンから離れると、コンテナコントロールの前のコントロールを選択するにはどうすればよいですか?

UPDATE:私はこれを行うために必要がある場合

私の問題は検出されません - にフォーカスを送信するために制御を見つけることです。

UPDATE:

SelectNextControlのみコンテナの親のコントロール内で動作するようです。コンテナが親の唯一のコントロールである場合、タブ内でフォーカスを受け取る階層内の他のコントロールがある場合でも、フォーカスは変更されません。

答えて

0

ハックですが、ブール変数と組み合わせたOnEnterイベントを使用できます。変数がtrueに設定されている場合は、コンテナに既に入っていて、以前のコントロール(コンテナコントロールのプロパティであるため、どこに行くかを知ることができます)に移動します。

変数がfalseの場合は、カスタムコントロールに移動し、上/下にフォーカスします。

コンテナの終了時に、変数をfalseに戻します。

私はそこにはもっと単純なものがあると確信していますが、これは私が考えることができる最も速いものです。

+0

私の問題は、私がこれを行う必要があるときに検出されていません - それはフォーカスを送信するコントロールを見つけることです。 – Simon

1

あなたがSendKeys.Send("+{TAB}");SendKeys.Send("{TAB}");

を使用することができたり、Control.SelectNextControl()

1
void UserControl1_Leave(object sender, EventArgs e) 
    { 
     this.numericUpDown1.Visible = false; 
     Control c = Parent.Controls[this.Name]; 
     int i = Parent.Controls.IndexOf(c); 
     Parent.Controls[i - 1].Focus(); 
    } 

を使用することができ、タブの方向を知っていれば、私はカスタムコントロールと私のためにその作業にこの休暇のイベントを追加しました。基本的にユーザーがタブを移動すると、このイベントは親フォームのコントロールコレクションの前のコントロールにフォーカスを設定します。あなたの探しているものが正確かどうかは分かりませんが、うまくいけばあなたを正しい方向に送るでしょう。

+0

これは、Parent.Controlsコレクションに以前のコントロールがあると仮定していますが、これを考慮に入れて、いくつかの調整を加えれば、これが適切な解決策になります。 –

0

実際これは私にとってはデフォルトの動作であるようですか?

+1

selectnextcontrolの逆方向へのオーバーロードがあります。 SelectNextControl(Me、False、True、False、False) – eschneider

関連する問題