2009-04-06 10 views
1

可変数のラベルを作成し、それらのTextBoxコントロールの隣に、列全体にラベルを並べ、各行にLabelとTextBoxを配置する必要があります。私のメインウィンドウがすべてのTextBoxコントロールの合計高さよりも小さい場合、何とか私はTextBoxのリストをスクロールできるスクロールバーが必要です。 Enterキーを押すと、次のTextBoxにフォーカスを移動し、TextBoxが多すぎる場合はスクロールする必要があります。WinForms:可変数の動的TextBoxコントロール

これはかなり一般的な問題ですが、私はすでにこのためのいくつかの事前焼成されたソリューションがあると思います。

アドバイスはありますか?

答えて

1

TableLayoutPanelは、コントロール(ラベルとテキストボックス)のコンテナとして使用でき、コードでダイナミックに作成できます。

例:

void Form1_Load(object sender, EventArgs e) { 
    const int COUNT = 10; 

    TableLayoutPanel pnlContent = new TableLayoutPanel(); 
    pnlContent.Dock = DockStyle.Fill; 
    pnlContent.AutoScroll = true; 
    pnlContent.AutoScrollMargin = new Size(1, 1); 
    pnlContent.AutoScrollMinSize = new Size(1, 1); 
    pnlContent.RowCount = COUNT; 
    pnlContent.ColumnCount = 3; 
    for (int i = 0; i < pnlContent.ColumnCount; i++) { 
     pnlContent.ColumnStyles.Add(new ColumnStyle()); 
    } 
    pnlContent.ColumnStyles[0].Width = 100; 
    pnlContent.ColumnStyles[1].Width = 5; 
    pnlContent.ColumnStyles[2].SizeType = SizeType.Percent; 
    pnlContent.ColumnStyles[2].Width = 100; 

    this.Controls.Add(pnlContent); 

    for (int i = 0; i < COUNT; i++) { 
     pnlContent.RowStyles.Add(new RowStyle(SizeType.Absolute, 20)); 

     Label lblTitle = new Label(); 
     lblTitle.Text = string.Format("Row {0}:", i + 1); 
     lblTitle.TabIndex = (i * 2); 
     lblTitle.Margin = new Padding(0); 
     lblTitle.Dock = DockStyle.Fill; 
     pnlContent.Controls.Add(lblTitle, 0, i); 

     TextBox txtValue = new TextBox(); 
     txtValue.TabIndex = (i * 2) + 1; 
     txtValue.Margin = new Padding(0); 
     txtValue.Dock = DockStyle.Fill; 
     txtValue.KeyDown += new KeyEventHandler(txtValue_KeyDown); 
     pnlContent.Controls.Add(txtValue, 2, i); 
    } 
} 

void txtValue_KeyDown(object sender, KeyEventArgs e) { 
    if (e.KeyCode == Keys.Enter) { 
     SendKeys.Send("{TAB}"); 
    } 
} 
6

TableLayoutPanelを使用してください。動的にコントロールを追加することができます(specify their row/column)、適切な設定でスクロールバーが維持されます。それはその癖がありますが、この場合に適しています。

WinFormsデザイナを使用してTableLayoutPanelを配置する場合は、それを使用して列のスタイルを定義することもできます。 Tcksで提案されているように、各行のスタイルを変えることもできます。指定された行/列にコントロールを追加する

int column = 42; 
int row = 7; 
myTableLayoutPanel.Controls.Add(new TextBox(), column, row); 
1

また、それにはいくつかのコントロールを追加した後、ウィンドウ/ユーザーコントロールの生成されたコードを確認してください。これがどのように動的に行うことができるかについての良い考えが得られるはずです。 (私はsomename.cs.designerファイルについて話しています)

関連する問題