2014-03-24 33 views
1

我正在生成x個按鈕量,我給它們提供了一個唯一的名稱。按給定名稱編輯按鈕

所有這些都生成後,我想編輯其中一個而不重新生成它們,所以我想知道是否可以通過它的名稱獲取組件?

我使用的WinForms

+2

你有什麼用? WinForms,WPF,WEB? –

+0

您是否嘗試在代碼編輯器中鍵入按鈕名稱? –

+0

@SergeyBerezovskiy按鈕在不同的範圍 – DaveL

回答

0

您可以使用表單的Controls屬性(或表單上的某個容器控件)。隨着LINQ可以選擇按鈕,然後找到第一個按鈕與所需的名稱:

var button1 = Controls.OfType<Button>().FirstOrDefault(b => b.Name == "button1"); 

或者,如果你要搜索的孩子遞歸

var button1 = Controls.Find("button1", true) 
         .OfType<Button>() 
         .FirstOrDefault(); 

控制沒有LINQ可以使用的ControlCollection的方法Find(string key, bool searchAllChildren)

Control[] controls = Controls.Find("button1", true); 
if (controls.Length > 0) 
{ 
    Button button1 = controls[0] as Button; 
} 
+0

這看起來很整齊。但是,當我嘗試將它用作按鈕時,我得到一個NullReferenceException。 (button1 var)。我應該檢查它是否是一個按鈕,即使它被稱爲類型

+0

如果沒有帶搜索名稱的按鈕,則FirstOrDefault將返回默認值。 Button的默認值爲空。所以是的,你應該檢查null來驗證按鈕是否被找到。另外請確保您使用的控件集合已添加按鈕到 –

+1

ty。公認!!! – DaveL

2

是:

Control myControl = Controls.Find("textBox1"); 

現在,提防你必須做正確的鑄造母雞發現,因爲查找返回控制。

0

所有這些都生成後,我想編輯其中一個沒有 正在重新生成它們,所以我想知道如果我可以通過其名稱獲得組件 ?

var myButton = Controls.Find("buttonName", true).FirstOrDefault(); //Gets control by name 
if(myButton != null) 
{ 
    if (myButton.GetType() == typeof(Button)) //Check if selected control is of type Button 
    { 
     //Edit button here... 
    } 
    else 
    { 
     //Control isn't a button 
    } 
} 
else 
{ 
    //Control not found. 
} 

確保你添加引用:LINQ。

+0

您確定'ControlCollection'中存在'Find(string)'方法嗎? –

+0

@SergeyBerezovskiy編輯答案,缺少搜索所有孩子的參數。 – Max

+0

不僅參數 - 現在它有錯誤的返回類型 - Find(string,bool)'返回控件數組 –

0
Button btn1 = (Button)(Controls.Find("btnName")); 

這將獲得所需的按鈕,將保存按鈕屬性到一個新的按鈕BTN1