2014-12-23 1 views
1

나는 아주 간단한 질문이 있습니다. 나는 15 개 버튼, 의 배경색을 변경하려면하지만 난 한 번에 모든 버튼에 색상을 지정할 수있는 방법- 1 변수로 너무 많은 버튼 사용

button1.backgroundColor = Color.black 
button2.backgroundColor = Color.black 
. 
. 
. 

를 작성하는 매우 복잡하다?

등 :

something allButtons = { button1.backgroundColor, button2.backgroundcolor .... } 

나는 OBJ-C에서이 작업을 수행하는 방법을 알고 :

for (int i = 1; i < 16; i++) 
{ 
    UIButton *button = (UIButton *)[tag:i]; 
    button.backgroundColor = [UIColor Color.black]; 
} 

하지만 방법은 C#으로 이러한 목표를 달성하기 위해?

+0

어레이. 이 의견은 대부분 필러입니다. –

+0

배열로 무엇을할까요? 더 많은 것을 설명하거나 코드로 답하십시오 – alix54

+0

어떤 UI 프레임 워크를 사용하고 있습니까? – Dennis

답변

1

당신은 버튼 배열에 버튼을 넣어

Button[] buttons = new Button[] {button1, button2, .....}; 

또는 버튼 배열을 통해 List<Button>

List<Button> buttons = new List<Button>() { button1, button2, ....); 

다음 당신에게 루프 또는 같은 방식으로

foreach(Button btn in buttons) 
    btn.BackColor = Color.Black; 
의 목록

이 속성을 변경하는 또 다른 방법은 Forms.Controls 컨테이너를 사용하여 반복하는 것입니다. 그러나 단추가 모두 Form.Controls 컬렉션에 포함되어있는 경우에만 작동합니다.

foreach (Control btn in this.Controls.OfType<Button>()) 
{ 
    btn.BackColor = Color.Black; 
} 

당신이 모든 컨트롤 컨테이너에 루프 재귀 함수를 사용해야합니다 내부 ControlCollection에에 포함 된 버튼의 문제를 해결하고 용기 내부에 결국

public void SetBackground(Control.ControlCollection coll) 
{ 
    foreach(Control ctr in coll) 
    { 
     if(ctr.Controls.Count > 0) 
      SetBackground(ctr.Controls); 
     else 
     { 
      Button btn = ctr as Button; 
      if(btn != null) btn.BackColor = Color.Black; 
     } 
    } 
} 

을 버튼에 도달 최상위 모음에서 호출하려면

SetBackground(this.Controls); 

훨씬 더 복잡하므로 배열을 사용하여 명시 적으로 변경해야하는 버튼을 선언하는 것을 선호합니다.

+0

이것은 누군가가이 배열을 생성해야한다고 가정합니다. 이것은 명백하고 보편적 인 솔루션이지만, UI 프레임 워크에 따라 컨트롤이 이미 어딘가에 포함되어 있기 때문에 오히려 못 생깁니다. OP는 버튼이 영향을받는 범위를 결정하기 만하면됩니다. – Dennis

+0

아마 맞 겠지만 배열을 만들면 루프에서 어떤 버튼을 변경해야하는지 더 잘 제어 할 수 있습니다. 그리고 우리는 WinForms에 대해 이야기하고 있습니다. – Steve

+0

목록

4

단추를 찾고 양식의 모든 컨트롤을 반복 할 수 있습니다.

foreach (Control c in this.Controls) 
    { 
     if (c.GetType() == typeof(Button)) 
     { 
      c.BackColor = Color.Black; 
     } 
    } 
+2

'c 버튼은 더 좋은 조건이라고 생각합니다. – Vlad

+3

@Vlad : 더 좋았을 때 -'Controls.OfType

+2

버튼이 기본 Form.Controls 컨테이너가 아닌 일부 컨테이너 안에 있으면. 이 방법으로 반복하면 루트 컨테이너에있는 단추 만 변경됩니다. (IE .GroupBox 안에 버튼을 넣으십시오. – Steve