2011-08-24 5 views
2

10 개의 텍스트 상자가 있고 각 텍스트 상자에 같은 텍스트를 넣으려고합니다.for 루프로 텍스트 상자를 반복하십시오.

for(int i=1; i<=10; i++) 
{ 
    textBox + i. Text = "hello!"; 
} 

물론, 그것은 작동하지 않습니다 : 나는 이런 식으로 뭔가를 작성할 수 있도록 나는 textBoxNum. Text = "hello!" 열 번을 쓰고 싶지 않아.

루프를 for 루프로 어떻게 수행 할 수 있습니까? 이처럼

TextBox[] boxes; 

public MyForm() { 
    InitializeComponent(); 
    boxes = { someTextBox, otherTextBox, ... }; 
} 
+0

텍스트 상자의 이름을 지정해야합니다. – SLaks

답변

6

모든 텍스트 상자를 목록 또는 배열 구조로로드해야하므로,이 텍스트 상자를 반복 할 수 있습니다.

TextBox[] boxes = { tb1, tb2, tb3, ... }; 

그렇지 않으면, 당신은 TextBox 유형의 항목에 대한 양식/컨테이너의 Controls 속성을 검사 할 수 있습니다. 컨트롤이 더 깊은 컨테이너에 중첩 될 수 있으면 재귀 적으로 탐색해야 할 수도 있습니다 (로드 할 텍스트 상자가 굉장히 많지 않다면이 시점에서 배열 접근법을 심각하게 고려할 것입니다). 하지만 출발점은 다음과 같습니다.

foreach (var tb in this.Controls.OfType<TextBox>()) 
{ 
    tb.Text = "whatever"; 
} 
3

당신은 배열로 텍스트 상자를 넣어해야

foreach (Control c in this.Controls) 
{ 
    if (c is TextBox) 
    { 
     ((TextBox)c).Text = "Hello"; 
    } 
} 

당신이 제어 \ 양식에 포함 된 모든 텍스트 상자의 텍스트를 설정하려는 가정 할 수 있지만, 보다 구체적인 시나리오를 위해 수정되었습니다.

0

원하는 컨트롤 만 편집 할 수도 있습니다. 여기에 예제가 있습니다.

foreach(Control ctrl in Controls) 
    { 
    if (ctrl.Name.StartsWith("TextBoxToEdit")) 
    { 
     ctrl.Text = "Hello!"; 
    } 
    } 

또한 Control에 이미 Text 속성이 있으므로 TextBox로 컨트롤을 캐스팅 할 필요가 없습니다.

+0

'Text' 속성을 가지고있을지라도'if (ctrl is TextBox) {}'를 확인하고 싶습니다. 무엇이든 "TextBoxToEdit"로 시작하는 이름을 가질 수 있습니다. –

관련 문제