在循环C#WPF中单击事件按钮

时间:2012-07-27 12:19:40

标签: c# wpf buttonclick

我有几个按钮,我把它放在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,然后执行某些操作。 这可能吗?

3 个答案:

答案 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中做到这一点吗?