C#如何设置相对高度的控制高度

时间:2011-02-16 08:45:45

标签: c#

我的表单包含一个制表符控件。在一个标签上,我有三个组框。每个组框的高度必须为选项卡高度的三分之一。

现在我在选项卡控件的布局事件上有这个代码:

        // Determine the position of the group panels (gp)
        this.SuspendLayout();
        int oneThird = (tabPanel.Height - 5) / 3;

        if (_currentQuestion != null && _currentQuestion.QuestionTypes == QuestionTypes.Infofield)
        {
            gpExplanation.Visible = false;
            gpFillInHelp.Visible = false;
            gpFillInQuestion.Height = oneThird * 3;
        }
        else
        {
            gpExplanation.Visible = true;
            gpFillInHelp.Visible = true;

            gpFillInQuestion.Height = oneThird;
            gpExplanation.Height = oneThird;
            gpFillInHelp.Height = oneThird;
        }

        // Determine position of the appointment and achievement group panels
        int height = tabPanel.Height - 30;
        int half = height / 2;

        pnlAppointment.Height = half;

        this.ResumeLayout();

我的表单构造函数中也包含此代码:

// Set styles which prevent screen flickering
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
this.DoubleBuffered = true;

在您眼中,设置组箱高度的最佳方法是什么?当表单调整大小时,组框高度必须是面板高度的三分之一。

我也想尽可能少地在屏幕上闪烁。

2 个答案:

答案 0 :(得分:3)

您可以使用TableLayoutPanel。在面板中,您可以指定RowStyle 这样它的大小就是父控件的百分比:

tableLayoutPanelGroupBoxes.ColumnCount = 1;
tableLayoutPanelGroupBoxes.RowCount = 3;
tableLayoutPanelGroupBoxes.RowStyles.Add(new RowStyle(SizeType.Percent, 33.33333F));
tableLayoutPanelGroupBoxes.RowStyles.Add(new RowStyle(SizeType.Percent, 33.33334F));
tableLayoutPanelGroupBoxes.RowStyles.Add(new RowStyle(SizeType.Percent, 33.33334F));

只需将您的群组框中的DockStyle设置为DockStyle.Fill,然后将其添加到表格布局面板即可。您可以使用设计器执行此操作。

答案 1 :(得分:0)

使用组框的Achor属性。