如何查找和使用以编程方式创建的控件
本文关键字:编程 方式 创建 控件 何查找 查找 | 更新日期: 2023-09-27 18:35:10
我已经根据数据库条目在表单上创建了许多按钮,它们工作得很好。下面是用于创建它们的代码。如您所见,我给了他们一个标签:
for (int i = 0; i <= count && i < 3; i++)
{
btnAdd.Text = dataTable.Rows[i]["deviceDescription"].ToString();
btnAdd.Location = new Point(x, y);
btnAdd.Tag = i;
this.Controls.Add(btnAdd);
}
我使用这些按钮来可视化投票系统。例如,我希望按钮在一切正常时为绿色,在出现问题时为红色。
所以我遇到的问题是稍后引用按钮,以便我可以更改它们的属性。我尝试过以下方法:
this.Invoke((MethodInvoker)delegate
{
// txtOutput1.Text = (result[4] == 0x00 ? "HIGH" : "LOW"); // runs on UI thread
Button foundButton = (Button)Controls.Find(buttonNumber.ToString(), true)[0];
if (result[4] == 0x00)
{
foundButton.BackColor = Color.Green;
}
else
{
foundButton.BackColor = Color.Red;
}
});
但无济于事...我尝试更改Controls.Find()
的语法,但仍然没有运气。以前有没有人遇到过这个问题或知道该怎么做?
如果您在创建按钮时命名按钮,则可以从this.controls(...
喜欢这个
for (int i = 0; i <= count && i < 3; i++)
{
Button btnAdd = new Button();
btnAdd.Name="btn"+i;
btnAdd.Text = dataTable.Rows[i]["deviceDescription"].ToString();
btnAdd.Location = new Point(x, y);
btnAdd.Tag = i;
this.Controls.Add(btnAdd);
}
然后你可以像这样找到它
this.Controls["btn1"].Text="New Text";
或
for (int i = 0; i <= count && i < 3; i++)
{
//**EDIT** I added some exception catching here
if (this.Controls.ContainsKey("btn"+buttonNumber))
MessageBox.Show("btn"+buttonNumber + " Does not exist");
else
this.Controls["btn"+i].Text="I am Button "+i;
}
将这些按钮放在集合中,并设置控件的名称,而不是使用其标记。
var myButtons = new List<Button>();
var btnAdd = new Button();
btnAdd.Text = dataTable.Rows[i]["deviceDescription"].ToString();
btnAdd.Location = new Point(x, y);
btnAdd.Name = i;
myButtons.Add(btnAdd);
要找到按钮,请使用它。
Button foundButton = myButtons.Where(s => s.Name == buttonNumber.ToString());
或者干脆
Button foundButton = myButtons[buttonNumber];
在您的情况下,我会使用一个简单的字典来存储和检索按钮。
声明:
IDictionary<int, Button> kpiButtons = new Dictionary<int, Button>();
用法:
Button btnFound = kpiButtons[i];
@Asif是对的,但如果你真的想使用标签,你可以使用 next
var button = (from c in Controls.OfType<Button>()
where (c.Tag is int) && (int)c.Tag == buttonNumber
select c).FirstOrDefault();
我宁愿创建带有数字、按钮引用和逻辑的小帮助程序类,并将其收集在表单上。