2017-11-24 2 views
2

저는 실행 중에 개체 속성을 변경해야하는 프로그램을 작성했습니다. 쉬운 관리를 위해 나를 위해서는 나는 원래 개체 이름의 예 "단추 1"변수를 사용하여 개체 참조하기 (C#)

변수에 의해 개체 이름을 참조 할 수있는 방법이 있다면 내 질문은 루프로 변경되는

I를 유지했습니다 분명히

작동하지 않았다

private void disable() 
{ 
    this.button1.Visible = false; 
    this.button2.Visible = false; 
    this.button3.Visible = false; 
    //... 
} 

내가 해봤 뭔가

int a; 
for(a=1;a==50;a++) 
{ 
    this.buttona.Visible =false; 
} 

처럼 같은 물건을 작성하는 했어 '

그런 다음 변수가있는 객체를 참조 할 수있는 방법이 있습니까? 사전에

감사

당신은이 코드를 사용할 수 있습니다
+4

가 배열을 봐. – user3080953

+0

List를 만들고 루프를 사용하여 객체를 참조 할 수 있습니다. –

+0

단추 배열을 만든 다음 foreach 루프 나 인덱스 변수가있는 for 루프를 사용하여 루프를 반복합니다. 또한 단추의 이름을 올바르게 지정하는 것이 좋습니다. 기본 이름을 사용하는 것이 쉽지만 다른 사람이 코드를 유지 관리해야한다면 줄을 긋고 버그를 유발할 가능성이 높습니다. 그리고 다른 재미있는 것들. – Diado

답변

5

:

 foreach (var c in this.Controls) 
     { 
      if (c is Button button) 
       button.Visible = false; 
     } 

을 또는이 하나

 for (int i = 0; i < 50; i++) 
     { 
      var c = this.Controls["button" + i]; 
      (c as Button).Visible = false; 
     } 
+0

'private button button1 = new Button();' 으로 코드에 버튼을 만들고 있는데 변수를 다음과 같이 지정할 때 :'var c = this.Controls [ "button"+ num.ToString()]; ' null을 반환하고 'this.Controls.Add (c as Button);'로 속성을 변경하거나'(c as Button) .Location = new Point (30, 90) ; ' 참조를 사용하거나 실종되었을 수 있습니다.사전에 감사드립니다 @BrandonMinnick – Ypsok

+0

양식의 컨트롤 컬렉션에 button1을 추가 했습니까? this.Controls.Add (button1); , 그들은이 목록에 있습니까? 'Name'필드를 설정 했습니까? button1.Name = 'button1'; ? – mrbm

0

당신이 등 UWP, WPF를 수행하지 않는 경우가 작동하지 않을 수 있습니다 UWP, WPF 등을 수행하는 경우이 방법이 도움이 될 수 있습니다. 이 모든 버튼이 하나의 패널에 속하기 때문에 패널의 하위 또는 내용은 IEnumerable 객체 여야하며 foreach 루프로 처리 할 수 ​​있습니다. 예를 들어, 나는 다음과 같은 XAML 코드가있는 경우 :

<Grid x:Name="myGrid"> 
    <Button x:Name="Button1" Tag="myButton1"/> 
    <Button x:Name="Button2" Tag="myButton2"/> 
    <!-- ... --> 
</Grid> 

내가 이것을 사용하여 버튼을 반복 할 수 있습니다

foreach(Button button in myGrid.Children){ 
    if(!button.Tag.StartsWith("myButton")) continue; 
    button.Visibility = Visibility.Collapsed; 
} 
관련 문제