C#动态radiobuttons,更改文本

时间:2014-03-11 12:14:21

标签: c# dynamic radio-button

我有一个功能,每次用户点击按钮时都会创建X个单选按钮。代码现在看起来像这样(我也试过将它们分组)。现在我只使用我能想到的最简单的方法。

private void createRadioButtons(int amount, String answ)
{
   String[] splitAnsw = answ.Split(new Char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); // Splits up a string containing the radio button text

   for (int i = 0; i < amount; i++) {
        RadioButton rb = new RadioButton();
        rb.Text = splitAnsw[i];
        rb.Location = new Point(200, 300 + i * 20);
        this.Controls.Add(rb);
        Console.WriteLine(splitAnsw[i]);
    }
}

这确实创建了它们的X,但问题出现时应该更新文本。 splitAnsw中的文本在写出时会更改并正确显示,但单选按钮中的文本不会更新。

1 个答案:

答案 0 :(得分:1)

你在那里创造了很多控件,这会导致糟糕的性能。您需要稍微清理一下代码。

首先,在类中声明一个私有成员来保存对新创建的控件的引用。

private IEnumerable<Control> _controls = null;

创建一个删除旧控件的方法:

private void ClearOldControls()
{
    if(_controls != null)
    {
        foreach(var control in _controls)
        {
            this.Controls.Remove(control);
            control.Dispose();
        }
    }
}

现在,在您的方法中,在创建新控件之前,请删除旧控件:

private void createRadioButtons(int amount, String answ)
{
    ClearOldControls();
    // Create new ones
    _controls = answ.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries)
        .Take(amount)
        .Select(answer =>
        {
            var rb = new RadioButton();
            rb.Text = answer;
            this.Controls.Add(rb);
            return rb;
        });
}

当然,在您将控件插入/移出容器之前,请不要忘记拨打Control.SuspendLayout(),并在完成后Control.ResumeLayout()