TableLayoutPanel改变了它的大小

时间:2014-06-03 13:37:52

标签: c# winforms tablelayoutpanel

我的程序中有一些tablelayoutpanels,以便在行中布置不同的控件。直到最近这些都正常工作,但在服务器更改后,情况不再如此。一个潜在的原因是屏幕分辨率的变化,因为我注意到在运行我的程序的其他计算机上存在类似的问题。

此问题的一个示例如下所示

enter image description here

在加载数据行之前(从数据库),大小调整不正确。使用VS设计器的测量结果表明图2中的尺寸是正确的。有趣的是,如果我在此表中添加一个空行,则不会发生调整大小。

public JobOpMainTable()
{
    DoubleBuffered = true;
    AutoSize = true;
    AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
    DoubleBuffered = true;
    BackColor = Color.White;
    CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
    headers();
}

private void headers()
{
    string[] names = { "Operation", "Est Lab Hrs", "Est UM Hrs", "Act Lab Hrs", "Act UM Hrs" };
    for (int i = 0; i < names.Length; i++) header(names[i], i);
}

private void header(string name, int col)
{
    Panel pan = new Panel();
    pan.Width = widths[col];
    pan.Height = 25;
    pan.BackColor = Color.Black;
    pan.Dock = DockStyle.Fill;
    pan.Margin = new System.Windows.Forms.Padding(0);
    TextBox txt = new TextBox();
    txt.Font = new System.Drawing.Font("Microsoft sans serif", 8, FontStyle.Bold);
    txt.Text = name;
    txt.ReadOnly = true;
    txt.BackColor = Color.Black;
    txt.ForeColor = Color.White;
    txt.Dock = DockStyle.Fill;
    txt.BorderStyle = System.Windows.Forms.BorderStyle.None
    pan.Controls.Add(txt);
    Controls.Add(pan, col, 0);
}

private int newRow()
{
    int row = Controls.Count / 5;
    for (int i = 0; i <= 4; i++)
    {
        TextBox txt = new TextBox();
        txt.Width = widths[i];
        txt.BackColor = Color.White;
        txt.BorderStyle = System.Windows.Forms.BorderStyle.None;
        txt.ReadOnly = true;
        txt.Dock = DockStyle.Fill;
        txt.Margin = new Padding(0);
        txt.Enter += new EventHandler(enterCell);
        txt.Leave += new EventHandler(leaveCell);
        Controls.Add(txt, i, row);
    }
    return row;
}

以上是我认为与问题相关的代码。在加载数据时第一次调用newRow()时会发生调整大小:每个新框都会使列更宽。但是,奇怪的是,如果我从构造函数

添加一行,则不会发生这种情况

0 个答案:

没有答案