C# Can';t在我的TableLayoutPanel上放置水平滚动条

C# Can';t在我的TableLayoutPanel上放置水平滚动条,c#,.net,winforms,C#,.net,Winforms,我有一个表单,其中有一个TableLayoutPanel,其中有几个单选按钮。 表单具有固定大小,控件是动态生成的 有时,单选按钮的文本太长,无法完全显示,在这种情况下,我希望启用到TableLayout的水平滚动。但不管我怎么努力,我都不知道该怎么做。简单地将TableLayoutPanel Autoscroll属性设置为true没有任何作用 我尝试将TableLayout嵌套在一个面板中,但没有成功。我试着把每个单选按钮放在一个面板中,然后把面板放在桌面布局中。这使水平滚动出现,但当然单选按

我有一个表单,其中有一个TableLayoutPanel,其中有几个单选按钮。 表单具有固定大小,控件是动态生成的

有时,单选按钮的文本太长,无法完全显示,在这种情况下,我希望启用到TableLayout的水平滚动。但不管我怎么努力,我都不知道该怎么做。简单地将TableLayoutPanel Autoscroll属性设置为true没有任何作用

我尝试将TableLayout嵌套在一个面板中,但没有成功。我试着把每个单选按钮放在一个面板中,然后把面板放在桌面布局中。这使水平滚动出现,但当然单选按钮不再在同一容器中,因此它们彼此独立。我弄乱了控件的几个属性,但没有用

我真的不知道该怎么办。 以下是控件的生成方式(这是我修改之前的原始代码):

公共静态面板ChoicePanel(字符串标题、字符串描述、字符串内部名称、bool收音机、字符串oldValue、列表选项、int num、bool必填项)
{
var nbrow=(string.IsNullOrWhiteSpace(description)?1:2;
var nbcol=1;var currentRow=realFirstRow;
if(radio)nbrow+=choices.Count();
否则nbrow+=1;
var面板=GeneratePanel(标题、nbcol、nbrow、num、必填项);
foreach(选择中的var ch)
{
var rb=新的单选按钮()
{
Name=“rb”+内部名称+当前行,
Text=ch,
选中=!string.IsNullOrEmpty(oldValue)&&ch==oldValue,
Dock=DockStyle.Fill,
自动检查=真,
};
panel.Controls.Add(rb、firstCol、currentRow);
currentRow++;
}
AddDescription(说明、当前行、面板);
返回面板;
}
专用静态表格布局面板GeneratePanel(字符串标题、int numcol、int numlines、int num、bool必填)
{
变量面板=新的TableLayoutPanel()
{
AutoSize=true,
AutoSizeMode=System.Windows.Forms.AutoSizeMode.GrowtOnly,
Dock=DockStyle.Fill,
ColumnCount=numcol+1,
RowCount=numlines,
Name=“panel”+num,
};
对于(变量i=0;i
请注意,这段代码是由其他人编写的,但我会尽力回答问题


谢谢你的帮助。

看起来不太对劲。请注意代码如何给出冲突的布局说明。AutoSize=true无法与DockStyle.Fill匹配。后者获胜,TLP大小由表单大小设置。AutoScroll=true是显示滚动条所必需的。单选按钮问题是模糊的,使用DockStyle。填充不能正确。考虑在设计师中尝试这个,即时WYSIWYG反馈是有用的。谢谢,很多!表单实际上要复杂得多,表格布局位于面板内,面板位于另一个表格布局内,其所有属性都设置为上面的示例。我真的不知道Dock和AutoSize属性。我将TLP的Dock道具设置为false,添加了底部填充(我不希望垂直滚动条显示),我还禁用了radiobtn上的Dock,并将其Autosize设置为true,结果成功了。再次感谢,我是一个初学者,独自开发这个我没有开发的应用程序,我很难维护它:)
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;
    }