我正在向 TableLayoutPanel 动态添加控件。
它有 12 行和 32 列。
我已经划分了列的宽度,这样带有标签的宽度是带有文本框的宽度的两倍,并且百分比加起来为 100:
labels = 5%
textBoxes = 2.5%
由于每行有 24 个文本框,每行有 8 个标签,这等于 100%(40% 标签,60% 文本框)。
但是,最后一列是太空猪,如下所示:
http://warbler.posterous.com/the-32-column-is-wider-than-the-rest
而且我需要标签的空间来展示它们的整个自我:它们实际上是五个字符宽(“00:00”...“23:45”),而不是显示的四个字符。
根据经验证据(以前的反复试验),我可以减小 TLP 的宽度以缩小最后一列,但这并不能解决我的标签单元太窄的问题。
这就是我在 TLP 上打控件的方式(我在设计时通过 Columns 集合的属性页面设置了列宽百分比)
private void AddPlatypusScheduleControlsToTableLayoutPanel()
{
try
{
this.SuspendLayout();
tableLayoutPanelPlatypusSchedule.ColumnCount = PLATYPUS_SCHEDULE_COL_COUNT;
int ColNum = 0;
int RowNum = 0;
int LoopCounter = 1;
var dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);
while (LoopCounter <= QUARTER_HOUR_COUNT)
{
string lblName = string.Format("labelPS{0}", LoopCounter);
var lbl = new Label
{
Name = lblName,
Dock = DockStyle.Fill,
Margin = new Padding(),
Font = new Font("Microsoft Sans Serif", 7),
TextAlign = ContentAlignment.MiddleCenter,
Text = dt.ToString("HH:mm")
};
tableLayoutPanelPlatypusSchedule.Controls.Add(lbl, ColNum, RowNum);
string txtbxName1 = string.Format("textBoxLSA{0}", LoopCounter);
var txtbxa = new TextBox { Name = txtbxName1, Dock = DockStyle.Fill, Margin = new Padding() };
string txtbxName2 = string.Format("textBoxLSB{0}", LoopCounter);
var txtbxb = new TextBox { Name = txtbxName2, Dock = DockStyle.Fill, Margin = new Padding() };
string txtbxName3 = string.Format("textBoxLSC{0}", LoopCounter);
var txtbxc = new TextBox { Name = txtbxName3, Dock = DockStyle.Fill, Margin = new Padding() };
tableLayoutPanelPlatypusSchedule.Controls.Add(txtbxa, ColNum + 1, RowNum);
tableLayoutPanelPlatypusSchedule.Controls.Add(txtbxb, ColNum + 2, RowNum);
tableLayoutPanelPlatypusSchedule.Controls.Add(txtbxc, ColNum + 3, RowNum);
dt = dt.AddMinutes(15);
RowNum++;
LoopCounter++;
if (RowNum == 12)
{
ColNum = ColNum + 4;
RowNum = 0;
}
}
}
finally {
this.ResumeLayout();
}
}
更新
我想问题可能是 TLP 的宽度不能被 32 整除(它是 619);所以我把它扩大到640,但同样的问题仍然存在。
更新 2
为了让它工作,我不得不对列使用绝对大小而不是百分比*,并将标签保持列的宽度增加到 35(在 TLP 宽度为 640 时,只有 15 个用于保持文本框的列) .
- WPF 有时可能是一只熊(更像是 Kodiak 而不是 Winnie),但它确实满足了这种情况的需求,我担心绝对尺寸会在不同的分辨率/屏幕尺寸等下全部转移到达拉斯。