2016-11-09 1 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-able-to-cast-object-of-type-error-when-try-to-loop-through-button) – Sinatr

+0

Непонятно, где находится кнопка, которую вы ищете. Он содержится в коллекции управления FlowLayoutPanel или внутри коллекции элементов управления формами? – Steve

+0

мои кнопки находятся в потоковом поле – Sheva07

ответ

1

Эта строка неверна

foreach (Button c in f1.Controls) 

Здесь вы считаете, что каждый элемент управления в f1 есть кнопка, так и текстовые поля и другие элементы управления будет инициировать ошибку. Вместо этого, если вы хотите только кнопки изменить код

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

Имейте в виду, что это будет найти только кнопки, которые непосредственно содержатся в коллекции Controls вашей формы. Если они находятся внутри другого контейнера (например, GroupBox или панели) линия не будет работать, и вы должны использовать соответствующий контейнер или рекурсивный вызов для прохождения каждой коллекции Controls

EDIT

Если кнопка в коллекции элементов управления в 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

Смежные вопросы