0

生成されたコントロールのサイズを自動調整したい。のタイプである2つのTextBoxタイプと2つのタイプを作成します。それぞれに、私がキャプションと呼ぶ文字列を表示する があります。2 つのテキストボックスのうちの 1 つしか表示されません。2 つのキャプションのうちの 1 つしか表示されません。フォーム内のすべてのコントロールを表示するにはどうすればよいですか? コントロールポジションを自分で管理したくない。むしろ設定に固執します。CustomControlUserControlCustomControlLabelDock

 public partial class SomeForm : Form
{
    public SomeForm()
    {
        InitializeComponent();
        LoadControls();//I can only see the first control caption and textBox2
        //how can I display both textboxes and both captions?
    }

    private void LoadControls()
    {
        TextBox textBox = GenerateTextBox("First textbox");
        TextBox textBox2 = GenerateTextBox("Second textbox");

        CustomControl control = new CustomControl(labelCaption: "First control caption");
        CustomControl control2 = new CustomControl(labelCaption: "second control caption");            

        //add the textboxes to the usercontrols
        control.Controls.Add(textBox);
        control2.Controls.Add(textBox2);            

        //this displays only 1 control (incorrect)
        flowLayoutPanel1.Controls.Add(control);
        flowLayoutPanel1.Controls.Add(control2);
        flowLayoutPanel1.SetFlowBreak(control, true);
        flowLayoutPanel1.SetFlowBreak(control2, true);

        //this displays both controls (correct)
        //flowLayoutPanel1.Controls.Add(textBox);
        //flowLayoutPanel1.Controls.Add(textBox2);
        //flowLayoutPanel1.SetFlowBreak(textBox, true);
        //flowLayoutPanel1.SetFlowBreak(textBox2, true);
    }

    private static TextBox GenerateTextBox(string text)
    {
        TextBox textBox = new TextBox();
        textBox.Text = text;
        textBox.Dock = DockStyle.Top;
        return textBox;
    }
}

カスタム コントロール:

    public CustomControl(string labelCaption)
    {
        InitializeComponent();
        Label label = new Label();
        label.Text = "Rtb..." + labelCaption;
        //label.Dock = DockStyle.Top;
        //contentPanel.Controls.Add(label);//disabled for now
    }
4

1 に答える 1

1

問題は、DockStyle.Top を使用した初期化です。

        CustomControl control = new CustomControl(labelCaption: "First control caption");
        control.Dock = DockStyle.Top;        
        CustomControl control2 = new CustomControl(labelCaption: "second control caption");            
        control2.Dock = DockStyle.Top;

このように重なり合っていきます。DockStyle を使用する代わりに、配置属性を使用します。

       control.Top = 0;
       control2.Top = control.Height;

それはあなたが行く必要がある場所にあなたを連れて行くはずです。

これをうまく行う方法を学ぶ良い方法は、デザイナーが生成するコードを見ることです。これをデザイナで手動で行い、生成されたコードを確認すると、将来コード内でポジショニングを行う方法を一般化するのに役立ちます。

コメントに基づいて編集します。

FlowLayoutPanelを使用して、それぞれの後に FlowBreak を設定できます。

flowLayoutPanel.Controls.Add(control);
flowLayoutPanel.Controls.Add(control2);
flowLayoutPanel.SetFlowBreak(control, true);
flowLayoutPanel.SetFlowBreak(control2, true);
于 2012-12-05T00:55:44.820 に答える