收音机按钮没有显示

时间:2014-07-02 05:42:36

标签: c# winforms radio-button

我使用下面的代码来快速简便地获取用户输入,在这种情况下,从一组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中设置内容的东西,但是什么?

1 个答案:

答案 0 :(得分:2)

我运行了你的代码来测试它。单选按钮位于Form上。他们只是从右侧推开。

在以下行放置一个断点:

btn.Location =
    new System.Drawing.Point((column + 1) * vSpace, (line + 1) * hSpace);

并检查(column + 1) * vSpace的值。您必须更正其正在进行的计算,或使Form更宽。