C# 在c中设置列中动态创建的单选按钮的格式#

C# 在c中设置列中动态创建的单选按钮的格式#,c#,winforms,radio-button,C#,Winforms,Radio Button,我以编程方式为数组/列表中的每个元素创建单选按钮,并将它们放置在windows窗体中 现在,每个新的单选按钮都位于前一个单选按钮的下方。我如何在4/5单选按钮之后开始新列?新列应出现在先前单选按钮的右侧 这是我目前的代码: for (int i = 0; i < startShapes.Count; i++) { RadioButton rdb = new RadioButton(); rdb.Text = startShapes.Values.ElementAt(i).E

我以编程方式为数组/列表中的每个元素创建单选按钮,并将它们放置在windows窗体中

现在,每个新的单选按钮都位于前一个单选按钮的下方。我如何在4/5单选按钮之后开始新列?新列应出现在先前单选按钮的右侧

这是我目前的代码:

for (int i = 0; i < startShapes.Count; i++)
{
    RadioButton rdb = new RadioButton();
    rdb.Text = startShapes.Values.ElementAt(i).Equals("") ? startShapes.Keys.ElementAt(i) : startShapes.Values.ElementAt(i);
    rdb.Size = new Size(100, 30);
    this.Controls.Add(rdb);
    rdb.Location = new Point(45, 70 + 35 * i);
    rdb.CheckedChanged += (s, ee) =>
    {
        var r = s as RadioButton;
        if (r.Checked)
            this.selectedString = r.Text;
    };
}
for(int i=0;i
{
var r=s作为单选按钮;
如果(右勾选)
this.selectedString=r.Text;
};
}

使用TableLayoutPanel怎么样

        Dictionary<string, string> startShapes = new Dictionary<string, string>();
        for(int i=0;i<20;i++)
            startShapes.Add("Shape " +i, "Shape " +i);
        int row = 0;
        int col = 0;
        tableLayoutPanel1.RowStyles.Clear();
        tableLayoutPanel1.ColumnStyles.Clear();
        tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
        tableLayoutPanel1.RowCount= 0;
        tableLayoutPanel1.ColumnCount = 1;

        foreach (var kvp in startShapes)
        {
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize));
            tableLayoutPanel1.RowCount++;
            RadioButton rdb = new RadioButton();
            rdb.Text = string.IsNullOrEmpty(kvp.Value) ? kvp.Key : kvp.Value;
            rdb.Size = new Size(100, 30);
            rdb.CheckedChanged += (s, ee) =>
            {
                var r = s as RadioButton;
                if (r.Checked)
                    this.selectedString = r.Text;
            };
            tableLayoutPanel1.Controls.Add(rdb, col, row);
            row++;
            if (row == 5)
            {
                col++;
                row = 0;
                tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
                tableLayoutPanel1.ColumnCount++;
            }
        }
Dictionary startShapes=newdictionary();
对于(int i=0;i
{
var r=s作为单选按钮;
如果(右勾选)
this.selectedString=r.Text;
};
tableLayoutPanel1.Controls.Add(rdb、col、row);
行++;
如果(行==5)
{
col++;
行=0;
tableLayoutPanel1.ColumnStyles.Add(新ColumnStyle(SizeType.AutoSize));
tableLayoutPanel1.ColumnCount++;
}
}
如果您确实需要您的解决方案:

int left = 45;
int idx = 0;
for (int i = 0; i < startShapes.Count; i++)
{
    RadioButton rdb = new RadioButton();
    rdb.Text = startShapes.Values.ElementAt(i).Equals("") ? startShapes.Keys.ElementAt(i) : startShapes.Values.ElementAt(i);
    rdb.Size = new Size(100, 30);
    this.Controls.Add(rdb);
    rdb.Location = new Point(left, 70 + 35 * idx++);
    if (idx == 5)
    {
        idx = 0; // reset row
        left += rdb.Width + 5; // move to next column
    }
    rdb.CheckedChanged += (s, ee) =>
    {
        var r = s as RadioButton;
        if (r.Checked)
            this.selectedString = r.Text;
    };
}
int左=45;
int-idx=0;
对于(int i=0;i
{
var r=s作为单选按钮;
如果(右勾选)
this.selectedString=r.Text;
};
}

在何处开始新列?为什么不分享您迄今为止所做的工作?增加下一个单选按钮的左值?@Abhishek post已更新!将您的单选按钮添加到FlowLayoutPanel中