c# - 如何访问和更改我动态创建的标签的属性
问题描述
我想改变using s 的Text
属性,就像在 hangman 中一样;但是在我创建之后,当我尝试访问特定的标签时我变得很困惑Label
Button
Label
// creating label
for (int i = 0; i < numericUpDown1.Value; i++)
{
Label l = new Label();
l.Text = "_";
l.Width = 20;
l.Height = 25;
l.Left = i * 20 + 510;
l.Top = 20;
l.BackColor = Color.Transparent;
groupBox2.Controls.Add(l);
}
// function to change the label text
// if I clicked the button
// the first label text will be changed to the text in the button i clicked
private void B_Click(object sender, EventArgs e)
{
var thsBtn = (Button)sender;
bool benar = false;
if (benar == false)
{
thsBtn.Text = " ";
thsBtn.Enabled = false;
}
else
{
thsBtn.Enabled = false;
}
}
解决方案
您可以将created组织Label
到一个集合中,例如List<Label>
:
private List<Label> m_CreatedLabels = new List<Label>();
...
// Remove all previous labels
foreach (Label lbl in m_CreatedLabels)
lbl.Dispose();
m_CreatedLabels.Clear();
// Create new ones
for (int i = 0; i < numericUpDown1.Value; i++) {
m_CreatedLabels.Add(new Label() {
Text = "_",
Width = 20,
Height = 25,
Left = i * 20 + 510,
Top = 20,
BackColor = Color.Transparent,
Parent = groupBox2
});
}
现在您可以m_CreatedLabels
使用已创建的集合Label
,例如
private void B_Click(object sender, EventArgs e) {
var thsBtn = sender as Button;
// you may want to add a condition into FirstOrDefault(), e.g.
// .FirstOrDefault(lbl => lbl.Text == "_")
// - first label with "_" Text
Label lblToProcess = m_CreatedLabels
.FirstOrDefault();
if (null != lblToProcess)
lblToProcess.Text = thsBtn.Text;
thsBtn.Enabled = false;
}
推荐阅读
- rest - 上次修改日期的 Acumatica REST API 过滤器
- apache-zeppelin - Apache Zeppelin 如何为每个用户保存解释器配置
- android - Android 在 RecyclerView 项目点击时访问 TextView 值
- python - 如何在python中的数据集中的任何列中找出一个或多个值为零的行
- rust - 对于 u8 字节,是否有类似 char::escape_default 的函数?
- ios - 模拟器在验证 Apple ID 登录时崩溃
- ubuntu - 使用 AutoKey 读取数字很慢
- javascript - 如何阻止整页自动滚动屏幕截图扩展的自动滚动功能?
- typescript - 如何在 Typescript 中获取当前日期前 3 个月的日期对象
- javascript - 鼠标拖动事件有 Y 坐标跳跃/间隙