我有几个按钮,我把它放在loopPanel循环中:
for (int i = 0; i < wrapWidthItems; i++)
{
for (int j = 0; j < wrapHeightItems; j++)
{
Button bnt = new Button();
bnt.Width = 50;
bnt.Height = 50;
bnt.Content = "Button" + i + j;
bnt.Name = "Button" + i + j;
bnt.Click += method here ?
wrapPanelCategoryButtons.Children.Add(bnt);
}
}
我想知道点击了哪个按钮,并为每个按钮执行不同的操作。例如,有方法
private void buttonClicked(Button b)
在哪里发送点击按钮,检查其类型,名称或ID,然后执行某些操作。 这可能吗?
答案 0 :(得分:3)
将此添加到您的循环中:
bnt.Click += (source, e) =>
{
//type the method's code here, using bnt to reference the button
};
Lambda表达式允许您在代码中嵌入匿名方法,以便您可以访问本地方法变量。您可以阅读更多相关信息here。
答案 1 :(得分:3)
您连接到事件的所有方法都有一个参数sender
,它是触发事件的对象。所以在你的情况下发送一个被点击的Button对象。你可以像这样投出它:
void button_Click(Object sender, EventArgs e)
{
Button buttonThatWasClicked = (Button)sender;
// your code here e.g. call your method buttonClicked(buttonThatWasClicked);
}
答案 2 :(得分:1)
再次感谢两位回复 - 两者都有效。有完整的代码,也许其他人可能会在将来需要它
for (int i = 0; i < wrapWidthItems; i++)
{
for (int j = 0; j < wrapHeightItems; j++)
{
Button bnt = new Button();
bnt.Width = 50;
bnt.Height = 50;
bnt.Content = "Button" + i + j;
bnt.Name = "Button" + i + j;
bnt.Click += new RoutedEventHandler(bnt_Click);
/* bnt.Click += (source, e) =>
{
MessageBox.Show("Button pressed" + bnt.Name);
};*/
wrapPanelCategoryButtons.Children.Add(bnt);
}
}
}
void bnt_Click(object sender, RoutedEventArgs e)
{
Button buttonThatWasClicked = (Button)sender;
MessageBox.Show("Button pressed " + buttonThatWasClicked.Name);
}
顺便说一句,我想知道是否可以(使用wrapPanel)将按钮移动到另一个位置?我的意思是当我点击并拖动按钮时能够在wrappanel中做到这一点吗?