2012-03-19 17 views
3

私はWindowsフォームアプリケーションを開発しています。そして、私は次の問題があります:フォームにはパネルがあり、パネルには多数のコントロールがあります(テキストボックスのラベル、実行時に番号が決まります)。このパネルのサイズは、動的に追加されたすべてのコントロールの合計よりも小さくなっています。だから、私はスクロールが必要です。ユーザーがフォームを開いたとき:最初のコントロールにフォーカスを合わせ、ユーザーがテキストを入力してEnterキーを押し、次のコントロールにフォーカスを合わせ、完了するまで続けます。windows forms:プログラムでスクロール

これはおそらく、すべてのコントロールがパネルに収まるわけではないので、パネル内のコントロールにフォーカスがあると、パネルがスクロールしてユーザーにコントロールが表示され、ユーザーが入力した内容を見ることができますテキストボックス

私は明確になることを望みます。ここ

はいくつかのコードで、このコードが生成されたコントロールに使用してパネルに追加されます。

List<String> titles = this.BancaService.ValuesTitle(); 
    int position = 0; 
    foreach (String title in titles) 
    { 
     BancaInputControl control = new BancaInputControl(title); 
     control.OnInputGotFocus = (c) => { 
       //pnBancaInputContainer.VerticalScroll.Value = 40; 
       //pnBancaInputContainer.AutoScrollOffset = new Point(0, c.Top); 
       // HERE, WHAT CAN I DO? 
       }; 
     control.Top = position; 
     this.pnBancaInputContainer.Controls.Add(control); 
     position += 10 + control.Height; 
    } 
+0

スクロールアニメーションをしたいですか?または、特定のコントロールの表示/非表示を切り替えるだけですか? – SkonJeet

+0

ありがとうございます、フォーカスを得たコントロールの可視性 –

答えて

3

あなたがtrueにAutoScrollを設定した場合、これは自動的に世話をされます。入力考え方については、次のフィールドにフォーカスを移動する必要があり、それはBancaInputControlでTABキーであるかのように、最善の解決策は、入力し実行するために、次のようになります。BancaInputControlは複合コントロールである場合

protected override void OnKeyDown(KeyEventArgs e) 
{ 
    base.OnKeyDown(e); 

    if (e.KeyCode == Keys.Enter) 
    { 
     e.Handled = true; 
     // Move focus to next control in parent container 
     Parent.SelectNextControl(this, true, true, false, false); 
    } 
} 

(含むユーザーコントロール他のコントロール)、各子コントロールはKeyDownイベントをこのハンドラに接続する必要があります。次のコントロールにフォーカスを移そうとしますBancaInputControl;失敗した場合は、フォーカスを親コンテナの次のコントロールに移動します。

private void textBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     e.Handled = true; 
     if (!SelectNextControl((Control)sender, true, true, false, false)) 
     { 
      Parent.SelectNextControl(this, true, true, false, false); 
     } 
    } 
} 
関連する問題