2013-08-05 96 views
1

我正在生成一些具有相似或相同内容的按钮,并希望使用它们的名称来区分它们。由于程序正在动态创建按钮,因此我无法为它们创建单独的事件,而是需要能够获取名称以便能够知道哪个按钮触发了该事件。传递按钮的名称以单击事件

有没有办法将按钮的名称传递给它启动的点击事件?发件人对象似乎包含内容但不包含名称。

正是出于这样的事件:

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     //getname of button 
     Canvas.Children.Remove(//name of button\\) 
    } 

回答

5

我不熟悉的WPF。如果这个答案看起来像垃圾,我会删除它。

在ASP.Net中,我们可以投到一个按钮来获取发件人的信息。像这样的东西 -

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var button = sender as Button; 
    button.Name 
} 
+0

事实上这并不会携手,因为默认情况下,按钮和其他WPF元素没有分配到任何名称。他们只是一个空的字符串。 –

+0

这实际上似乎工作。我需要进一步测试它以确保它在所有情况下都能正常工作,但您可能已经为我节省了一个麻烦世界! –

+0

这使我可以抓取和保存按钮的名称以及按钮本身,以用于其他事件。非常感谢你,我需要什么。 –

6

据我所知,WPF甚至不自动分配任何内容到Name财产 - 这还只是针对开发人员分配,所以我们可以参考对照。

但是,您应该可以将发件人传递给remove方法,因为它接受Button派生自的UIElement参数。

Canvas.Children.Remove((Button)sender); 
+0

程序在创建每个按钮时为其分配一个唯一的名称。还试图Canvas.Children.Remove(发件人);返回错误:“System.Windows.Controls.UIElementCollection.Remove(System.Windows.UIElement)'的最佳重载方法匹配'有一些无效参数” –

+0

由于“sender”是“对象”而导致该错误。将它转换为“Button”,然后它将成为UIElement。这个答案是正确的。 – BTownTKD

+0

啊是的,一旦我这样做,它确实有效。这个名字本身就是我需要去抓的,因为它不仅仅是用来移除它自己。我从来没有见过(按钮)用法来定义一些东西。我想知道还有什么我可以使用类似的方法在我的代码中简化。 –

0

在控件的名称也许会得到你

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    Control control = (Control)sender; 
    Canvas.Children.Remove(control.Name); 
}