我使用下面的代码来快速简便地获取用户输入,在这种情况下,从一组radiobuttons中选择一个选项。
internal static int multipleChoice(IEnumerable<string> options, int indexOfDefault, string header)
{
string[] input = options.ToArray();
int result = indexOfDefault;
Form promt = new Form();
promt.Text = header;
promt.FormBorderStyle = FormBorderStyle.FixedToolWindow;
List<RadioButton> buttonsInForm = new List<RadioButton>();
int maxPerColumn = 6;
int column = 0;
int line = 0;
int hSpace = 25;
int vSpace = 180;
for(int i = 0; i < input.Length; i++)
{
RadioButton btn = new RadioButton();
if(i == indexOfDefault)
btn.Checked = true;
btn.Text = input[i];
btn.Location = new System.Drawing.Point((column + 1) * vSpace, (line + 1) * hSpace);
line++;
if(line > maxPerColumn)
{
line = 0;
column++;
}
btn.CheckedChanged +=
(sender, e) =>
{
RadioButton caller = (RadioButton)sender;
if(!caller.Checked)
return;
result = buttonsInForm.IndexOf(caller);
};
buttonsInForm.Add(btn);
}
promt.Width = column * vSpace + 150;
if(buttonsInForm.Count < maxPerColumn)
promt.Height = (buttonsInForm.Count + 2) * vSpace;
else
promt.Height = (maxPerColumn + 2) * vSpace;
promt.Controls.AddRange(buttonsInForm.ToArray());
promt.ShowDialog();
return result;
}
示例电话
List<string> whatEv = new List<string>();
whatEv.Add("one");
whatEv.Add("two");
whatEv.Add("three");
string foo = promts.multipleChoice(whatEv, 1, "form title");
问题是:
使用时,它确实显示一个表格,但没有显示Radiobuttons。(同样表格的尺寸不能按预期工作,但这对我来说适用于以后)
我已经使用调试器完成了循环,所有按钮看起来都很好
此外,我没有收到任何例外或编译器警告
我的假设是我忘记了在for-loop中设置内容的东西,但是什么?
答案 0 :(得分:2)
我运行了你的代码来测试它。单选按钮位于Form
上。他们只是从右侧推开。
在以下行放置一个断点:
btn.Location =
new System.Drawing.Point((column + 1) * vSpace, (line + 1) * hSpace);
并检查(column + 1) * vSpace
的值。您必须更正其正在进行的计算,或使Form
更宽。