【发布时间】:2014-08-22 19:17:08
【问题描述】:
我使用下面的代码有一个快速简单的方法来获取用户输入,在这种情况下,从一组单选按钮中选择一个选项。
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");
问题是:
使用时,它确实显示了一个表单,但没有单选按钮。(表单的大小也不能按预期工作,但这是我以后的事)
我已经使用调试器逐步完成了循环,所有按钮看起来都很好。
此外,我没有收到任何异常或编译器警告。
我的假设是我忘记了在 for 循环中设置的东西,但是什么?
【问题讨论】:
-
vspace计算似乎不对。仅用于测试目的更改int vspace = 50。 -
@HassanNisar 是的,这就是问题所在,格兰特发布了一个关于它的答案。
标签: c# winforms radio-button