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中的文本在写入时确实会更改并正确显示,但单选按钮中的文本不会更新。
您在那里创建了相当多的控件,这将导致糟糕的性能。你需要稍微清理一下你的代码。
首先,在你的类中声明一个私有成员来保存对你新创建的控件的引用。
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()
。