【问题标题】:Radiobuttons not showing up单选按钮未显示
【发布时间】: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


【解决方案1】:

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

在以下行放置一个断点:

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

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

【讨论】:

  • 就这么简单。我想,我的表格足够宽。我也一直忘记,winfroms 根本不在乎或告诉你是否将东西放在够不到和看不见的地方。
猜你喜欢
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 2021-06-10
相关资源
最近更新 更多