Por que apenas o primeiro RadioButton está sendo adicionado ao GroupBox?
Estou tentando criar dinamicamente controles do Windows e adicioná-los a um painel. Para Button e Checkbox, isso funcionou bem; No entanto, eu tive um problema com um GroupBox, com RadioButtons dentro dele.
O primeiro elemento RadioButton é criado e adicionado ao GroupBox no local esperado, mas os existentes, apesar de ostensivamente criados (percorrer o código que parece ser esse o caso), eles não são visíveis.
Eu pensaria que se os RadioButtons subseqüentes estivessem sendo colocados sobre os anteriores, o último seria o visto. Isto é o que parece:
Cada valor delimitado por ~ deve ser o valor de texto de um radioButton, mas apenas um é exibido. Preciso fornecer explicitamente os valores de Localização para os RadioButtons subsequentes, ou por que isso está falhando?
Aqui está o código:
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;
}
ATUALIZARA idéia na resposta abaixo por Pierre parece sensata, mas ainda não é exatamente o que o médico ordenou:
ATUALIZAÇÃO 2Isso funciona muito bem (modificação do código de Pierre):
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;
Dá-me: