2014-04-10 3 views
1

나는 많은 패널을 가지고있는 게임을 만들고있다. 그들의 이름은 polje1, polje2, polje3 등입니다. 그 중 일부의 경우, Invalidate() 메소드를 호출하여 페인트 이벤트를 새로 고쳐야하고 문제는 50 ifs 또는 switch 함수를 사용하고 싶지 않다는 것입니다.비슷한 이름의 패널에 액세스하기

그래서, 난 당신이 이해하지 않는 경우 ("polje" + number).Invalidate(); 여기

같은 일부 코드 수행 할 수 있습니다

Random rnd = new Random(); 
private Panel polje1; 
private Panel polje2; 
private Panel polje3; 
private Panel polje4; 
private Panel polje5; 
private Panel polje6; 
private Panel polje7; 
private Panel polje8; 
private Panel polje9; 
private Panel polje10; 

definition bla bla bla 
... 

private void button1_MouseClick(object sender, MouseEventArgs e) 
{ 
    int pp = rnd.Next(1,7); 
    SetCurrentField(pp); 
    ("polje" + pp).Invalidate(); 

}

은 어느 쪽도 무효화() 메소드는 옵션을 선택하지 않습니다, 양식이 깜박이기 때문에! 이미 클래스를 만들고 DoubleBuffered()를 수행합니다.

당신은 컨테이너의 컨트롤 컬렉션을 통해 이름 속성에 의해 제어에 액세스 할 수 있습니다
+1

감사합니다 사람 이잖아 내가 필요한 것 ! – Patyljak

답변

1

:

예 확인 컨트롤의 이름이 컬렉션의 존재 확인하기 위해 ContainsKey 기능을 보여주는 :

Panel polje1 = new Panel() { Name = "polje1" }; 
this.Controls.Add(polje1); 
if (this.Controls.ContainsKey("polje1")) { 
    this.Controls["polje1"].BackColor = Color.Red; 
} 
관련 문제