2013-08-05 66 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); 
}