работа с элементами управления (linklabels, treeview) в winforms - PullRequest
1 голос
/ 22 марта 2011

У меня есть панель и две ссылки, добавленные на панель, и древовидная структура.

Теперь в событии panel_Paint я хочу, чтобы цвета ярлыка стали белыми, а цвет фона дерева - черным.как мне это сделать?

приведенный ниже код работает только в том случае, если на панели нет древовидного представления, но когда я добавляю древовидное представление также на панели, появляется следующее сообщение:

Невозможно выполнить приведение объектатипа «System.Windows.Forms.TreeView» для ввода «System.Windows.Forms.LinkLabel».

foreach (LinkLabel link in panel1.Controls)
{         
    link.LinkColor = Color.White; 
}

Ответы [ 3 ]

3 голосов
/ 22 марта 2011

Ваша панель содержит все элементы управления - один из них - TreeView, который нельзя преобразовать в LinkLabel. В вашем цикле вам нужно проверить тип элемента управления следующим образом:

foreach (Control control in panel1.Controls)
{
   if (control is LinkLabel)
   {
       ... set link color
   }
   else if (control is TreeView)
   {
       ... set background
   }
}

В качестве альтернативы, если у вас есть только один LinkLabel и один TreeView, вам не понадобится цикл - просто получите доступ к ним по имени, как вы это сделали с panel1

2 голосов
/ 22 марта 2011

Вы получаете ошибку, потому что пытаетесь привести все элементы управления в Panel1 к LinkLabel. Вам нужно попробовать что-то вроде этого

foreach (Control control in panel1.Controls)
{
       if (control.GetType() == typeof(LinkLabel))
       {
            LinkLabel link = (LinkLabel)control;
            link.LinkColor = Color.White; 
       } 
}

Надеюсь, это поможет.

Редактировать: я знал, что есть метод, но не был уверен в 100% имени или синтаксиса. Ниже приведен улучшенный ответ.

foreach (LinkLabel link in panel1.Controls.OfType<LinkLabel>())
{
    link.LinkColor = Color.White;
}

Надеюсь, это лучше для вас.

2 голосов
/ 22 марта 2011

Попробуйте это:

foreach (Control ctrl in panel1.Controls)
{
     LinkLabel link = ctrl as LinkLabel;
     if(link != null)
        link.LinkColor = Color.White; 
}
...