【发布时间】:2019-04-19 00:37:55
【问题描述】:
我正在编写一个动态添加按钮的程序,我通过将它们存储在字典中以便稍后从它们中获取特定值(背景颜色)来做到这一点。
我需要为它们中的每一个设置一个 Click 事件,但是每个 Click 事件都必须有所不同,因为单击按钮,会弹出一个 ColorDialog 并更改按钮的背景。
有没有办法知道我点击了哪个按钮?在下面的代码中,button1点击事件添加了其他按钮并为每个按钮设置了EventHandler,EventHandler的代码应该是什么?非常感谢你们。
int i = 0;
Dictionary<int, Button> buttonDictionary = new Dictionary<int, Button>();
Dictionary<int, ColorDialog> colorsDictionary = new Dictionary<int ColorDialog>();
public void button1_Click(object sender, EventArgs e)
{
i++;
buttonDictionary.Add(i, new Button());
buttonDictionary[i].Click += new EventHandler(Click);
this.Controls.Add(buttonDictionary[i]);
}
public void Click(object sender, EventArgs e)
{
//Somehow get the int key of the button that was clicked???? (in this case: int j)
int j;
if (!colorsDictionary.ContainsKey(j))
{
colorsDictionary.Add(j, new ColorDialog());
}
if (colorsDictionary[j].ShowDialog() == DialogResult.OK)
{
buttonDictionary[j].BackColor = colorsDictionary[j].Color;
}
}
代码仅用于添加按钮,我会很高兴为您提供任何帮助,谢谢大家!
【问题讨论】:
-
使用
sender,将其转换为Button,然后检查与字典中的项目是否相等
标签: c# visual-studio button dynamic