2010-07-30 57 views
0

沒有詳細討論我想要達到的目標,是否可以(以及如何)可以引用一個我不知道名稱的對象? 例如,我要像saything:如何獲取當前控件的名稱以動態分配控件文本?

someButton.Text = someButton.Name; 

但右側我不想陳述對象的名字。所以我真的很想做的是一樣的東西:

someButton.Text = currentButton.Name; 
otherButton.Text = currentButton.Name; 

基本上我想這取決於一堆其他的東西在運行時動態分配控制文本。希望如果我能做到這一點,我可以只用一種方法做出決策並重新使用它。 (我正在使用Windows窗體) 我希望有一些方法可以讓程序知道我在說什麼控件(當前控件)有點像this參考。所以我不需要繼續傳遞特定的對象,如果我要這樣做,我可能只是傳遞字符串。我希望每次都需要粘貼調用該方法的相同代碼行。我懷疑我只是懶惰......而我想做的事很荒謬。

而且沒有關聯的控件事件。

我認爲答案可能是自定義控件。 (不只是按鈕,各種GUI控件)。哪一個會比我的選擇花費更多的努力。

回答

1

你如何確定「當前」按鈕?

只是點擊了嗎?將sender參數用於Click事件處理程序(並將其轉換爲Button)。

你的意思是焦點?閱讀ActiveControl屬性(並將其轉換爲Button)。

編輯︰等待,由目前按鈕你的意思是在左邊的一個賦值語句?如果你想執行一堆不同按鈕的操作,你可以避免多次命名每個按鈕。這裏有一個例子:

foreach(Button currentButton in new Button[] { thisButton, thatButton, otherButton, yetAnotherButton }) 
{ 
    currentButton.Text = currentButton.Name; 
} 

Action<Button> copyName = (currentButton) => currentButton.Text = currentButton.Name; 
copyName(thisButton); 
copyName(thatButton); 
copyName(otherButton); 
copyName(yetAnotherButton); 
+0

感謝。我認爲這是我所追求的。我剛剛在尋找與收藏有關的東西,而你的第一個例子看起來就像我想要做的。 如果我需要處理各種控件(而不僅僅是按鈕),我甚至可以將它與@ Draak的代碼結合起來。 謝謝。 – DougF 2010-08-01 23:11:35

+0

只要你沒有使用任何按鈕特定的屬性,你可以將'Button'改爲'Control'並且處理各種控件。當你有一個基類時沒有理由使用反射。 – 2010-08-01 23:23:39

0

使用反射。

Imports System.Reflection 

Public Function GetName(b as Button) as String 
    Dim t As Type = b.GetType() 
    Dim prop As PropertyInfo = t.GetProperty("Name") 
    Return prop.GetValue(b, Nothing).ToString() 
End Function 

在C#中,我相信它會是這樣的:

using System.Reflection; 

public string GetName(Button b) 
{ 
    Type t = b.GetType(); 
    PropertyInfo prop = t.GetProperty("Name"); 
    return prop.GetValue(b, null).ToString(); 
} 
+0

除了我不認爲Button有一個Name屬性,所以我猜你會使用ID或其他工作。 – Antony 2010-07-30 01:42:18

+0

嗯,沒有跡象表明他在談論什麼樣的UI技術,但如果它是WPF或Windows窗體,它們都有一個Name屬性。在這兩種情況下都不需要反射 - 只需將對象轉換爲Control(WinForms)或FrameworkElement(WPF)類型即可。 – Josh 2010-07-30 02:28:00

+0

謝謝,我對這個答案感到興奮。然後我意識到它實際上和調用Button.Name屬性是一樣的。 :(:(它確實有;))我會更新這個問題,並提供更多的細節。 – DougF 2010-07-30 02:35:59

相關問題