2013-08-29 80 views
2

我想獲取splitContainer.Panel2下所有按鈕和標籤的背景顏色。 當我嘗試它,我發現我不是成功的(下是Panel2) 任何控制運行我試試這個代碼:如何獲取splitContainer.Panel2下的所有按鈕和標籤

foreach (Control c in ((Control)splitContainer.Panel2).Controls) 
{ 
    if ((c is Button) || (c is Label)) 
     MessageBox.Show("Name: " + c.Name + " Back Color: " + c.BackColor); 
} 

如何,我可以得到splitContainer.Panel2下的所有的標籤和按鈕的所有背景顏色?

編輯:

  1. 我在splitcontainer.Panel2一些面板和按鈕和標籤的面板。
  2. 我只得到這個meesage: 「姓名:panel_Right返回顏色:顏色[透明]」
+0

什麼沒有在你顯示的代碼工作?你有沒有例外? .Controls是否爲空? –

+0

那麼你對此有何期待? – VahidNaderi

+2

我想你在'splitContainer.Panel2'中有一個名爲'panel_Right'的Panel。這可能是您添加的唯一控件。休息可以在裏面'panel_Right' –

回答

6

你得到的消息,可能是因爲你有一個小組在你splitContainer.Panel2和應做:

foreach (Control c in ((Control)splitContainer.Panel2).Controls) 
{ 
    if(c is Panel) 
    { 
     foreach (Control curr in c.Controls) 
     { 
     MessageBox.Show("Name: " + curr.Name + " Back Color: " + curr.BackColor); 
     } 
    } 
} 
0

您還應該添加一個支票ButtonLabelmessagebox之前添加此行:

if ((c is Button) || (c is Label)) 
+0

謝謝。但我仍然沒有成功去獲取任何按鈕或標籤的實例。我插入這個代碼。 – AsfK

3

你可以做到這一點沒有LINQ,但我想在這裏使用LINQ

public IEnumerable<Control> GetControls(Control c){    
    return new []{c}.Concat(c.Controls.OfType<Control>() 
            .SelectMany(x => GetControls(x))); 
}  
foreach(Control c in GetControls(splitContainer.Panel2).Where(x=>x is Label || x is Button)) 
    MessageBox.Show("Name: " + c.Name + " Back Color: " + c.BackColor); 
+0

謝謝!這是美好的工作! – AsfK

+0

不錯的遞歸之一 – jwaliszko

相關問題