2012-03-07 9 views
1

~ 30 TextBox에서 데이터를 검색하는 프로그램 (C#, WPF)을 작성해야합니다. 나는 텍스트 박스를 순환시키고 싶다. 내가 textboxes의 배열을 만들려고했지만, 아주 잘 작동하지 않았다. 왜냐하면 모든 메서드에서이 배열을 반복해서 다시 초기화해야했기 때문이다.많은 텍스트 상자의 내용을 배열에 읽는 방법은 무엇입니까?

TextBox[] subjects = { textBox1, textBox2, textBox3, textBox4, textBox5, textBox6, textBox7, textBox8, textBox9, textBox10 }; 
TextBox[] credits = { textBox11, textBox12, textBox13, textBox14, textBox15, textBox16, textBox17, textBox18, textBox19, textBox20 }; 
TextBox[] marks = { textBox21, textBox22, textBox23, textBox24, textBox25, textBox26, textBox27, textBox28, textBox29, textBox30 }; 

Subject.SubjectName = subjects[selection].Text; 
Subject.AmountOfCredits= Convert.ToInt32(credits[selection].Text); 
Subject.Mark = Convert.ToInt32(marks[selection].Text); 

주요 질문은 텍스트 상자의 배열을 만들지 않고 이러한 모든 컨트롤을 순환시키는 다른 방법이 있다면?

미리 감사드립니다.

답변

0

DataGrid 컨트롤을 사용해 보셨습니까? 세 개의 열 (제목, 크레딧 및 마크)을 가질 수 있으며 SelectedItem 속성을 통해 선택한 레코드에 쉽게 도달 할 수 있습니까?

다른 옵션은 ItemsControl을 사용하는 것입니다. ItemTemplate의 스타일을 지정하여 세 개의 텍스트 상자를 만들 수 있습니다.이 텍스트 상자는 Subject의 속성을 직접 데이터 바인딩합니다. ItemsControl의 ItemsSource는 대상의 관찰 가능한 컬렉션에 바인딩됩니다. 이를 수행하는 방법에 대한 자세한 내용은 Data Templating Overview의 Microsoft 도움말을 참조하십시오.

1

각 텍스트 상자를 속성에 바인딩 할 수 있습니다. 그런 다음 각 속성의 설정자에서 배열에 적절한 값을 설정합니다.

public class test 
{ 
    private string[] _textBoxes; 

    // constructor 
    public test() 
    { 
     _textBoxes = new string[30]; 
    } 

    // bind your textboxes to a bunch 
    // of properties 
    public string Property0 
    { 
     get 
     { 
      return _textBoxes[0]; 
     } 
     set 
     { 
      _textBoxes[0] = value; 
      OnPropertyChanged("Property0"); 
     } 
    } 
} 
0

배열에 대해 전역이 아닌 양식으로 배열을 만들 수 없습니까? 그렇게하면 배열을 한 번만 만들 수 있습니다 (아마도 폼의 Load() 이벤트 내부에서). 컨트롤 배열이 글로벌하게하는 옵션이없는 경우 (이 배열 방식보다 다소 느리지 만)

, 당신은

string idx = (selection + 1).ToString(); // convert selection to 1-based index string 

TextBox subjectText = (TextBox)FindControl("textBox" + idx); 
TextBox amtCreditsText = (TextBox)FindControl("textBox1" + idx); 
TextBox marksText =  (TextBox)FindControl("textBox2" + idx); 
이름으로 컨트롤을 조회 할 수
관련 문제