2011-03-22 3 views
1

패널과 두 개의 LinkLabel이 패널과 트리 뷰에 추가되었습니다.winforms의 컨트롤 (linklabels, treeview) 작업

이제 panel_Paint 이벤트에서 나는 linklabel 색이 흰색이되고 treeview의 배경색이 검정색이되기를 원합니다. 어떻게해야합니까?

아래 코드는이 패널에는 트리 뷰가 없다하지만 난 패널에도있는 트 리뷰를 추가 할 때 다음 말하는 경우에만 작동합니다

'형식의 개체를 캐스팅 할 수 없습니다 System.Windows.Forms.TreeView '을 입력하여'System.Windows.Forms.LinkLabel '을 입력하십시오.

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

답변

3

귀하의 패널은 모든 컨트롤이 포함 - 그들 중 하나가 LinkLabel로 캐스팅 할 수없는 TreeView입니다. 당신이 panel1

와 함께했던 것처럼 단지 이름에 액세스 - 당신은 단지 당신이 루프를 필요가 없을 것 하나 LinkLabelTreeView이있는 경우 또는

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

: 루프에서이 같은 컨트롤의 종류를 확인해야

2

이 시도 :

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

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; 
} 

희망이 더 좋을 것입니다.

관련 문제