Почему только первый RadioButton добавляется в GroupBox?
Я пытаюсь динамически создавать элементы управления Windows и добавлять их на панель. Для кнопки и флажка это работало нормально; Я столкнулся с проблемой с GroupBox, однако, с RadioButtons внутри него.
Первый элемент RadioButton создается и добавляется в GroupBox в ожидаемом месте, но из-за того, что он создается якобы (пошагово просматривая код, кажется, что это так), он не виден.
Я бы подумал, что если последующие RadioButtons будут помещены поверх предыдущих, последним будет тот, который видели. Вот как это выглядит:
Каждое ~ -ограниченное значение val должно быть текстовым значением radioButton, но отображается только одно. Нужно ли явно указывать значения Location для последующих RadioButton-ов или почему это не получается?
Вот код:
private GroupBox getGroupBox(string currentSettings, int curLeftVal)
{
// "apple~orange~peach~True (must look for "enclose group in a black box" as the last val (ignore for the quick-and-dirty mockup, though))
List<string> grpbxVals = new List<string>(currentSettings.Split('~'));
GroupBox gb = new GroupBox();
gb.Height = 60;
gb.Location = new Point(curLeftVal, PANEL_TOP_LOC);
RadioButton radbtn = null;
// "-1" because we're ignoring the final bool ("enclose in black box")
for (int i = 0; i < grpbxVals.Count-1; i++)
{
radbtn = new RadioButton();
radbtn.Text = grpbxVals[i];
gb.Controls.Add(radbtn);
}
return gb;
}
ОБНОВИТЬИдея в ответе Пьера ниже кажется разумной, но все же это не совсем то, что доктор прописал:
ОБНОВЛЕНИЕ 2Это работает довольно хорошо (модификация кода Пьера):
IList<string> grpbxVals = new List<string>(currentSettings.Split('~'));
GroupBox gb = new GroupBox { Height = 60, Location = new Point(curLeftVal, 0) };
int radButtonPosition = 0;
for (int i = 0; i < grpbxVals.Count() - 1; i++)
{
gb.Controls.Add(new RadioButton { Text = grpbxVals[i], Location = new Point(curLeftVal, radButtonPosition) });
radButtonPosition += new RadioButton().Height - 4; // the "-4" is a kludge
}
return gb;
Дает мне: