2016-11-09 54 views
0

我有一個應用程序,其中我有內部,以便區分它們許多按鍵,我創建一個類中,我把這個: 我不得不說,我的按鈕是在FlowLayoutPanel。無法轉換類型的對象「System.Windows.Forms.FlowLayoutPanel」到「System.Windows.Forms.Button C#

public static void SetButtonPos(Form f1,FlowLayoutPanel fk) 
     { 



      foreach (Button c in f1.Controls) 
      { 

       if(c.Name.Contains("BTN_Menu")) 
       { 
        c.Size= new Size(247, 45); 
        c.BackColor = ColorTranslator.FromHtml("#373737"); 
        c.ForeColor = ColorTranslator.FromHtml("#FFFFFF"); 
        c.FlatStyle = FlatStyle.Flat; 
        c.FlatAppearance.BorderSize = 0; 
        c.TextAlign = ContentAlignment.MiddleLeft; 
        c.TextImageRelation = TextImageRelation.ImageBeforeText; 
        c.Height = 45; 
        c.Width = fk.Width - 6; 

       } 
      } 

     } 

但是我在標題中出現了錯誤,你有什麼想法嗎?

無法轉換類型 'System.Windows.Forms.FlowLayoutPanel' 的目標,以「System.Windows.Forms.Button

謝謝。

+1

的可能的複製[走走無法投類型的對象,通過Button控件上的表單試圖循環時,錯誤](HTTP: //stackoverflow.com/questions/28468613/ge tting-unable-cast-object-of-type-error-when-trying-to-loop-through-button) – Sinatr

+0

目前還不清楚你正在搜索的按鈕位於何處。它包含在FlowLayoutPanel控件集合中還是在表單控件集合中? – Steve

+0

我的按鈕是flowpanel – Sheva07

回答

1

這行不正確

foreach (Button c in f1.Controls) 

在這裏,您認爲在F1中的每個控件是一個按鈕,這樣也文本框和其他控件會觸發你的錯誤。相反,如果你想只按鍵更改您的代碼

foreach (Button c in f1.Controls.OfType<Button>()) 

請記住,這會發現只有那些直接包含在窗體的Controls集合按鈕。如果他們是另一個容器內(如組框或面板)線以上將無法正常工作,你應該使用合適的容器或遞歸調用來遍歷所有的控件集合

編輯

如果你的按鈕在FlowLayoutPanel中的控件集合內,則代碼應該搜索該集合中的按鈕

foreach (Button c in fk.Controls.OfType<Button>()) 
+0

將需要遞歸到子控件好吧,雖然,例如http://stackoverflow.com/questions/1558127/how-can-i-get-all-controls-from-a-form-including-controls-in-any-container – stuartd

+0

我只是寫一下。但是,該答案不使用OfType擴展。搜索一個笨蛋,,,, – Steve

+0

根據OP,按鈕不在'f1';他們在'fk'。 – adv12

相關問題