在Form构造函数中,我生成一个面板数组(下面的代码中的 pnl _ ),其中包括radiobuttons。 当我可视化表格时,只有面板可见,而不是内部的单选按钮。 奇怪的是,当我只生成一个面板时,一切都很好( pnl 在下面的代码中)。
public partial class Radiobuttons_on_Panel : Form
{
private Panel pnl = new Panel();
private RadioButton rbtn1 = new RadioButton();
private RadioButton rbtn2 = new RadioButton();
private Panel[] pnl_ = new Panel[7];
private RadioButton[] rbtn1_ = new RadioButton[7];
private RadioButton[] rbtn2_ = new RadioButton[7];
public Radiobuttons_on_Panel()
{
InitializeComponent();
pnl.Location = new Point(10, 10);
pnl.Size = new Size(100, 100);
pnl.BorderStyle = BorderStyle.FixedSingle;
rbtn1.Location = pnl.Location;
rbtn1.Text = "AAA";
rbtn2.Location = new Point(pnl.Location.X, pnl.Location.Y + rbtn1.Height);
rbtn2.Text = "BBB";
pnl.Controls.Add(rbtn1);
pnl.Controls.Add(rbtn2);
this.Controls.Add(pnl);
for (int i = 0; i < pnl_.Length; i++)
{
pnl_[i] = new Panel();
pnl_[i].BorderStyle = BorderStyle.FixedSingle;
pnl_[i].Size = new Size(100, 100);
pnl_[i].Location = new Point(10 + i * 110, 200);
rbtn1_[i] = new RadioButton();
rbtn1_[i].Location = pnl_[i].Location;
rbtn1_[i].Text = "AAA";
rbtn2_[i] = new RadioButton();
rbtn2_[i].Location = new Point(pnl_[i].Location.X, pnl_[i].Location.Y + rbtn1_[i].Height);
rbtn2_[i].Text = "BBB";
pnl_[i].Controls.Add(rbtn1_[i]);
pnl_[i].Controls.Add(rbtn2_[i]);
this.Controls.Add(pnl_[i]);
}
}
}
问题出在哪里?
答案 0 :(得分:1)
您的问题是您的位置计算错误。单选按钮的位置与其容器相关 - 在本例中为面板。如果您只是将您的位置设置为
rbtn1_[i] = new RadioButton();
rbtn1_[i].Location = new Point(10, 10);
rbtn1_[i].Text = "AAA";
rbtn2_[i] = new RadioButton();
rbtn2_[i].Location = new Point(rbtn1_[i].Location.X, rbtn1_[i].Location.Y + rbtn1_[i].Height);
rbtn2_[i].Text = "BBB";
按钮的布局就像你想要的那样。
因为您的单选按钮位置值足够小,无法在面板中显示,所以您的第一个就可以解决问题。对于其他人来说,他们不在其父母小组的范围内。
它的长短是Location
属性始终相对于容器,无论是Panel
还是Form
- Location
值是您的面板相对于Form
,但单选按钮的Location
值与其所在的面板相关。
MSDN参考:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.location.aspx