无法在我的TableLayoutPanel上放置水平滚动

时间:2017-02-15 11:00:28

标签: c# .net winforms

我有一个表格,其中有一个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;
    }

请注意,是其他人编写了此代码,但我会尽力回答问题。

感谢您的帮助。

0 个答案:

没有答案