我有一个函数,每次用户单击按钮时,都会创建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 票数: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()你已经完成了。

  ask by dbso translate from so

未解决问题?本站智能推荐: