2012-03-19 109 views
3

我正在開發一個Windows窗體應用程序。我有以下問題:在一個窗體中有一個面板,在該面板中我有一些控件(只是帶有文本框的標籤,數字在運行時確定)。此面板的大小小於動態添加的所有控件的總和。所以,我需要一個滾動。那麼,這個想法是:當用戶打開表單時:必須關注第一個控件,用戶輸入文本並按下回車鍵,下一個控件必須被集中,直到完成。窗體窗體:以編程方式滾動

嗯,很可能並非所有的控件都適合面板,所以我希望當面板中的控件獲得焦點時,面板會滾動以讓用戶看到控件並讓他看到他正在輸入的內容文本框。

我希望能夠清楚。

這裏是一些代碼,這個代碼是用來生成控件並添加到面板:

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 2012-03-19 13:04:31

+0

謝謝,只有當他們獲得焦點時控件的可見性 – 2012-03-19 13:21:15

回答

3

如果設置AutoScroll爲true,這將是自動的照顧。至於該輸入應該將焦點移動到下一個字段的想法,最好的解決辦法是執行進入,就好像是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); 
    } 
} 

如果BancaInputControl是複合控件(包含用戶控件其他控件),每個子控件應該將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); 
     } 
    } 
} 
相關問題