我有一个表格,其中有一个TableLayoutPanel,其中有几个RadioButtons。 表单具有固定大小,控件是动态生成的。
有时,RadioButtons的文本太长而无法完全显示,我想在这种情况下启用到TableLayout的水平滚动。但无论我如何尝试,我都无法弄清楚如何去做。只需将TableLayoutPanel Autoscroll属性设置为true就不会做任何事情。
我试图将TableLayout嵌套在Panel中,但它不起作用。我试图将每个RadioButton放在Panel中,然后将Panel放在TableLayout中。这使得水平滚动出现,但当然RadioButtons不再在同一个容器中,因此它们彼此独立。我搞砸了控件的几个属性,但无济于事。
我真的不知道该怎么做。 以下是控件的生成方式(这是我修改之前的原始代码):
public static Panel ChoicePanel(string title, string description, string internalName, bool radio, string oldValue, List<string> choices, int num, bool required)
{
var nbrow = (string.IsNullOrWhiteSpace(description) ? 1 : 2);
var nbcol = 1; var currentRow = realFirstRow;
if (radio) nbrow += choices.Count();
else nbrow += 1;
var panel = GeneratePanel(title, nbcol, nbrow, num, required);
foreach (var ch in choices)
{
var rb = new RadioButton()
{
Name = "rb" + internalName + currentRow,
Text = ch,
Checked = !string.IsNullOrEmpty(oldValue) && ch == oldValue,
Dock = DockStyle.Fill,
AutoCheck = true,
};
panel.Controls.Add(rb, firstCol, currentRow);
currentRow++;
}
AddDescription(description, currentRow, panel);
return panel;
}
private static TableLayoutPanel GeneratePanel(string title, int numcol, int numlines, int num, bool required)
{
var panel = new TableLayoutPanel()
{
AutoSize = true,
AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly,
Dock = DockStyle.Fill,
ColumnCount = numcol + 1,
RowCount = numlines,
Name = "panel" + num,
};
for (var i = 0; i < numlines; i++)
{
panel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
}
((Panel)panel).Margin = new Padding(5, 10, 10, 5);
var lTitle = GenerateTitle(title, required);
panel.Controls.Add(lTitle, 1, 0);
panel.SetColumnSpan(lTitle, numcol);
var labColor = new Label()
{
Dock = DockStyle.Fill,
BackColor = notErrorColor,
Name = "lbColor",
};
panel.Controls.Add(labColor, 0, 0);
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 10));
panel.SetRowSpan(labColor, numlines);
return panel;
}
请注意,是其他人编写了此代码,但我会尽力回答问题。
感谢您的帮助。