C#如何将RadioButton放入Panel

时间:2015-04-22 11:06:59

标签: c#

我到处搜寻,但程序太痛苦了。如何在不使用工具箱的情况下以编程方式将多个RadioButton放入面板中。我正在使用WinForms。经过几次建议,我仍然无法在面板内添加无线电按钮。

public partial class Form1 : Form
{

    RadioButton[] RadioButton_WallFirstStorey_Yes = new RadioButton[100];
    RadioButton[] RadioButton_WallFirstStorey_No = new RadioButton[100];

    Panel[] Panel_WallFirstStorey = new Panel[100];

    int CheckBoxWidth = 100;

    public Form1()
    {
        InitializeComponent();
        //code
        //procedure
    }

    private void InitializeRadioButton_Wall(RadioButton RadioButtonX)
    {
        RadioButtonX.AutoSize = true;
        RadioButtonX.Font = SystemFonts.DefaultFont;
        RadioButtonX.BackColor = Color.Transparent;
        Controls.Add(RadioButtonX);
    }

    private void InitializePanel_Wall(Panel PanelX)
    {
        PanelX.BackColor = Color.PaleTurquoise;
        PanelX.BorderStyle = BorderStyle.Fixed3D;
        PanelX.BringToFront();
        Controls.Add(PanelX);
    }

    private void MyProcedure()
    {
        int i;

        for (i = 1; i <= 100; i++)
        {
            Panel_WallFirstStorey[i] = new Panel();
            InitializePanel_Wall(Panel_WallFirstStorey[i]);
            Panel_WallFirstStorey[i].Location = new Point(Label_SeparatorLineVertical[ColumnMinimum + i].Location.X, Label_SeparatorLineHorizontal[RowMinimum + i].Location.Y);
            Panel_WallFirstStorey[i].Width = (Label_SeparatorLineVertical[ColumnMaximum].Location.X - Label_SeparatorLineVertical[ColumnMinimum].Location.X) / (ColumnMaximum - ColumnMinimum);
            Panel_WallFirstStorey[i].Height = CheckBoxWidth;
            Panel_WallFirstStorey[i].SendToBack();
        }

        for (i = 1; i <= 100; i++)
        {
            RadioButton_WallFirstStorey_Yes[i] = new RadioButton();
            RadioButton_WallFirstStorey_No[i] = new RadioButton();

            Panel_WallFirstStorey[i].Controls.Add(RadioButton_WallFirstStorey_Yes[i]);//I add this stuff
            Panel_WallFirstStorey[i].Controls.Add(RadioButton_WallFirstStorey_No[i]);//I add this stuff

            InitializeRadioButton_Wall(RadioButton_WallFirstStorey_Yes[i]);
            InitializeRadioButton_Wall(RadioButton_WallFirstStorey_No[i]);

            RadioButton_WallFirstStorey_Yes[i].Text = "Yes";
            RadioButton_WallFirstStorey_No[i].Text = "No";

            RadioButton_WallFirstStorey_Yes[i].Location = new Point(Panel_WallFirstStorey[i].Width / 3, 0);
            RadioButton_WallFirstStorey_No[i].Location = new Point(Panel_WallFirstStorey[i].Width * 2 / 3, 0);

            RadioButton_WallFirstStorey_Yes[i].Font = SystemFonts.DefaultFont;
            RadioButton_WallFirstStorey_No[i].Font = SystemFonts.DefaultFont;

            RadioButton_WallFirstStorey_Yes[i].BringToFront();
            RadioButton_WallFirstStorey_No[i].BringToFront();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

哇,你的代码在很多方面都是错误的....它会在面板绘制时反复创建控件,但它从来没有真正添加它们。

要向面板b添加单选按钮p,只需执行此操作即可:

RadioButton b = new RadioButton();
// Set properties for button here (text, location, handlers, etc.)

p.Controls.Add(b);

我会尝试以下程序而不是你的程序:

private void MyProcedure() 
{
    for (i = 1; i <= 100; i++)
    {
        RadioButton_WallFirstStorey_Yes[i] = new RadioButton();
        RadioButton_WallFirstStorey_No[i] = new RadioButton();
        InitializeRadioButton_Wall(RadioButton_WallFirstStorey_Yes[i]);
        InitializeRadioButton_Wall(RadioButton_WallFirstStorey_No[i]);

        RadioButton_WallFirstStorey_Yes[i].Text = "Yes";
        RadioButton_WallFirstStorey_No[i].Text = "No";

        RadioButton_WallFirstStorey_Yes[i].Location = new Point(Panel_WallFirstStorey[i].Location.X + Panel_WallFirstStorey[i].Width / 3, Panel_WallFirstStorey[i].Location.Y);
        RadioButton_WallFirstStorey_No[i].Location = new Point(Panel_WallFirstStorey[i].Location.X + Panel_WallFirstStorey[i].Width * 2 / 3, Panel_WallFirstStorey[i].Location.Y);

        Panel_WallFirstStorey[i].Controls.Add(RadioButton_WallFirstStorey_Yes[i]);
        Panel_WallFirstStorey[i].Controls.Add(RadioButton_WallFirstStorey_No[i]);
    }
}

以下代码表明您仍然做错了,将单选按钮添加到表单本身,但定位他们就像您已将添加到面板一样:

RadioButton_WallFirstStorey_Yes[i].Location = new Point(Panel_WallFirstStorey[i].Location.X + Panel_WallFirstStorey[i].Width / 3, Panel_WallFirstStorey[i].Location.Y);

如果您将按钮添加到面板,它很可能是不可见的,因为它在面板之外。如果您将按钮添加到面板,则必须使用相对于面板客户区的坐标。

RadioButton_WallFirstStorey_Yes[i].Location = new Point(Panel_WallFirstStorey[i].Width / 3, 0);
RadioButton_WallFirstStorey_No[i].Location = new Point(Panel_WallFirstStorey[i].Width * 2 / 3, 0);

您的更新代码清楚地显示了您的错误:

private void InitializeRadioButton_Wall(RadioButton RadioButtonX)
{
    RadioButtonX.AutoSize = true;
    RadioButtonX.Font = SystemFonts.DefaultFont;
    RadioButtonX.BackColor = Color.Transparent;

    // REMOVE THIS LINE!!
    Controls.Add(RadioButtonX);
}

最后一行将单选按钮添加到表单。正如我们一直在告诉你的那样。删除我上面标记的行。然后,单选按钮将添加到面板中。在此之后,这是一个正确的立场问题。

答案 1 :(得分:0)

您可以创建一个面板(或GroupBox),并在循环中添加RadioButtons。

它应该像Winforms中的任何其他控件一样工作。

    // Adds 10 Radiobuttons with the name "Radio <number>" 
    public Form1()
    {
        InitializeComponent();

        for (int n = 0; n < 10; n++)
        {
            // First instantiate a new RadioButton.
            RadioButton button = new RadioButton();

            // Now the name of the button.
            button.Text = "Radio" + n;

            // Dock the button to the top of the GroupBox (to put them in order)
            button.Dock = DockStyle.Top;

            // Add the button to the GroupBox.
            this.groupBoxRadio.Controls.Add(button);
        }
    }