c#动态单选按钮,改变文本

本文关键字:改变 文本 单选按钮 动态 | 更新日期: 2023-09-27 17:49:25

我有一个函数,每次用户单击一个按钮时创建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个,但是当文本需要更新时问题就出现了。splitanswer中的文本在写入时确实会更改并正确显示,但单选按钮中的文本不会更新。

c#动态单选按钮,改变文本

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

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

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()