2017-09-20 13 views
-1

패널 컨트롤이 25 개 있습니다 (보이는 false). 나는 그것을 보이게하고 싶다.변수 이름이있는 컨트롤 패널

하지만 작동하지 않습니다 : (오류 1 '문자열'에 '표시'에 대한 정의가없고 확장 메서드가 없습니다 '유형'의 첫 번째 인수를 허용하는 '표시'가 있습니다. 지시문 또는 어셈블리 참조가 사용하고 계십니까?) )

for (int i = 0; i < 25; i++) 
{ 
    string panelID = "panel" + i.ToString(); 
    panelID.Visible = true; 
} 

도움말

답변

1

에 코드를 입력하는 것은 너무 많은 전선에서 잘못된 것입니다.

그대로, 값이 panel0, panel1, panel2 등인 25 개의 문자열을 만들고 그 속성에 값을 할당하려고합니다. 그러나 문자열에는 Visible이라는 속성이 없으므로 오류가 발생합니다.

양식에서 Panel 유형의 컨트롤을 잡고 값을 설정하십시오.

foreach(var panel in this.Controls.OfType<Panel>()) 
{ 
    panel.Visible = true; 
} 

경고 : 위의 만 맨 위의 형태로 Panel 컨트롤을 찾을 수 있습니다. 중첩 된 컨트롤이 있다면 재귀 적으로 찾을 메서드를 작성하고 싶을 것입니다. 위는 당신에게 아이디어를주는 것입니다.

또한 여러 개의 Panel 컨트롤이 있고 이름 지정 규칙에 맞는 패널 이름의 속성 만 설정하려는 경우이를 필터링 할 수 있습니다. 여기

foreach(var panel in this.Controls.OfType<Panel>()) 
{ 
    if(panel name fits your naming convention) 
     panel.Visible = true; 
} 

, 당신이 Regex를 사용하여 올바른 패널 이름도 찾아보실 수 있습니다, 사용자 정의 함수를 사용하는 등

+0

25는 예입니다. 내 코드에서는 가변적입니다. 때때로 나는 4 번 패널을 몇 번이나 보이게하고 싶다. 25 (최대 25) – harbii

+0

그래, 그러니 제발 따라하십시오. 그것은 올바른 방향으로 당신을 도울 것입니다. – Sach

+0

감사합니다. Sach – harbii

1

당신은 당신에 의해를 참조 할 수있는 모음에있는 모든 동적으로 생성 패널을 저장할 수 있습니다 자신의 이름. 그러한 컬렉션 중 하나는 사전입니다.

public class Form1 : Form 
{ 
    Dictionary<string, Panel> panels = new Dictionary< string, Panel>(); 
    public void Form1_Load(object sender, EventArgs e) 
    { 
     for (var i = 0; i < 25; I++) 
     { 
      Panel panel = new Panel(); 
      panel.Name = "panel" + i.ToString(); 
      this.Controls.Add(panel); 
      panels.Add(panel.Name, Panel); 
     } 
    } 
} 

이제는 다음과 같이 표시하거나 숨길 수 있습니다.

private void ShowHidePanel(int panelNumber, bool visible) 
{ 
    panels["panel"+panelNumber.ToString()].Visible = visible ; 
} 

또는 다음과 같이 모든 패널을 표시하거나 숨기고 싶은 경우.

private void ShowHidePanels(bool visible) 
{ 
    for (var i = 0; i < 25; i++) 
    { 
     panels["panel" + i.ToString()].Visible = visible; 
    } 
}