2014-01-16 4 views
1

Windows 양식에서 여러 텍스트 상자를 만들고 읽는 가장 좋은 방법은 무엇입니까? 내 응용 프로그램에서 나는이를 위해 여러 텍스트 상자 추가 및 읽기

TextBoxAddress1 TextBoxEmail1 
TextBoxAddress2 TextBoxEmail2 
..... 
..... 
..... 
TextBoxAddressN TextBoxEmailN 

내가 끌어 폼에 여러 컨트롤을 떨어 뜨, 이메일 지금 나는이 같은 양식을 가지고

를 해결, 고객이 여러 개의 주소를 입력 할 수있는 창 형태가 그들 각각을 지명했다.

이 메서드를 사용하는 경우 첫 번째 행 (TextBoxAddress1 TextBoxEmail1)이 유효성 검사를 위해 채워지는지 또는 많은 코드 줄을 작성해야 하는지를 알기 위해 긴 코드를 작성해야했습니다.

더 좋은 방법이 있나요?

+0

명확하지 무엇을 네가 묻고있어, 적어도 나를 위해서. –

+2

하나의 TextBox 만 만들고 MultiLine을 true로 설정했다고 생각하십니까? 사용자에게 한 줄에 하나의 이메일 주소를 입력 한 다음 필요에 따라 다시 구문 분석합니다. –

+0

컨트롤의 유효성을 검사하고 유효하지 않은 메시지 상자를 팝업하는 것에 대해 이야기하고 있습니까? –

답변

1

전자 메일의 목록/목록보기와 팝업 양식을 보여주는 추가/편집/삭제 버튼 - 전자 메일 유효성 확인을위한 논리가 한 곳에 있으므로 목록이 늘어날 수 있습니다. 폼에 컨트롤을 추가해야합니다.

당신은 동적으로 텍스트 상자를 만들 수 있습니다.하지만 양식에 멋지게 레이아웃되도록 코드를 작성해야합니다. - 일부 유형의 목록을 갖는 것이 IMO가 쉽고 바인딩 (예 : 전자 메일 개체)

+0

그리고 OP는 이러한 이메일 주소를 읽는 방법을 묻기 때문에'listBox1.Controls.AsQueryable(). Where (x => x는 TextBox)'를 호출하면 각 텍스트 상자를'foreach' 루프에서 쉽게 처리 할 수 ​​있습니다. – JNYRanger

2

당신은 양식에 동적으로 TextBox을 추가하려면 다음 코드를 사용할 수 있습니다

private int m_CurrTexboxYPos = 10; 
private List<TextBox> m_TextBoxList = new List<TextBox>(); 

private void CreateCheckBox() 
{ 
    m_CurrTexboxYPos += 25; 
    TextBox textbox = new TextBox(); 
    textbox.Location = new System.Drawing.Point(0, m_CurrTexboxYPos); 
    textbox.Size = new System.Drawing.Size(100,20); 
    Controls.Add(textbox); 
    m_TextBoxList.Add(textbox); 
} 
+0

필자가 생략 한'Controls.Add (textbox);'줄을 추가했습니다. –

0

당신이 필요로하는 그룹의 각 사용자 컨트롤을 작성합니다. 하나 이상의 주소에 대한 하나의 이메일 등에 대한 귀하의 모든 유효성 검사, 데이터베이스 액세스에 대한 호출은 단일 위치에 포함되어 있습니다

그건 좋은 디자인입니다. 이런 식으로 집 정보, 직장 정보, 긴급 연락처 정보 등 여러 개의 탭이있는 경우 양식에 배치 할 수 있습니다. 이것은 사용자 프로파일에 대해 매우 일반적입니다.

그런 다음 사용자 프로필 페이지의 각 그룹에 대한 목록보기 또는 편집/삭제/추가 기능이있는 대화 상자를 열고 해당 사용자 정의 컨트롤이있는 대화 상자를 팝업합니다.

0

가장 간단하게 ListBox는 Button이있는 TextBox를 adobe합니다.

1.

은 또한 당신은 DataGridView를, \ 편집 \ 삭제를 추가하기위한 내장 기능을 사용할 수 있습니다. 여기

enter image description here

1

동적으로 컨트롤을 추가하는 것은 아주 간단 제공이 DockStyle를 사용하고 독점 (한 Fill 속성 AutoSizeMode와 컬, On Enter에 false로 설정 ShowHeader, EditMode)있는 DataGridView를 사용하여 컨테이너 (예 : Panel). DockStyle을 사용할 수 없다면 로직을 작성하여 LocationSize (재미 있지는 않음)을 결정해야합니다.간단한 폼

가 나는 두 개의 버튼과 패널을 가지고 Button1는 새로운 TextBox Panel1에 다음 Button2 Panel1의 제어를 반복하고들이 올바른 유형임을 확인 또는 예외를 발생 추가한다. 이것이 유효성 검사 또는 논리 읽기를 입력하는 곳입니다. Panel1에는 AutoScroll = true;이 있어야합니다. 그렇지 않으면 볼 수있는 화면에서 컨트롤이 실행됩니다.

이 개념은 UserControl (모든 .Net 네이티브 컨트롤 또는 사용자 지정 컨트롤)에서 상속되는 항목으로 바꿀 수 있습니다.

private void button1_Click(object sender, EventArgs e) 
{ 
    TextBox NewEmailBox = new TextBox(); 
    NewEmailBox.Name = "NewEmailBox" + this.panel1.Controls.Count; 
    NewEmailBox.Dock = DockStyle.Top; 
    this.panel1.Controls.Add(NewEmailBox); 

} 

private void button2_Click(object sender, EventArgs e) 
{ 
    foreach (Control item in this.panel1.Controls) 
    { 
     if (item is TextBox) 
     { 
      //Do your reading/validating here. 
     } 
     else 
     { 
      throw new InvalidCastException(string.Format("{0} was in Panel1 and is of type {1} not TextBox!", item.Name, item.GetType())); 
     } 
    } 
} 
0

반복 코드가 적을수록 프로그래머가 더 좋습니다.

패턴 (반복되는 내용)을 볼 때마다이를 최적화해야합니다. 그것이 너무 작아 걱정하지 않는 한.

귀하의 경우, 반복 가능한 기본 사항을 먼저 결정하십시오. 주소와 이메일 주소를 항상 입력해야합니까? 그런 다음 컨트롤을 결합하여 유효성 검사를 수행 할 수 있습니다. 이 컨트롤을 자주 사용해야합니까 (아니면 N 번 반복합니까)? 그런 다음 목록으로 전환하는 것이 좋습니다 (ListBox, ListView 또는 DataGridView).

너무 게으른 구성을 방해합니까? 그런 다음 분명히 반복 할 내용을 최적화하십시오. 일반적인 방법으로 유효성 검사를 입력하고 각 TextBox 이벤트에서 호출하십시오. 또는 메서드 구축 기능이있는 TextBox을 직접 작성하십시오. 또는 루프를 사용하여 Ok 단추 이벤트에서 한 번에 유효성 검사를 수행하거나 루프를 사용하여 유효성 검사를 수행하지 마십시오.

방법을 찾으려면 먼저 누가 가장 적합한 지 결정해야합니다. 고객은 반짝이 고 사용하기 쉽고, 고양이와 가슴을 가지고 애니메이션을 만들려고합니다. 고양이와 가슴이 없어도 좋습니다. 요점은 다음과 같습니다. 고객에게 가장 적합한 을 얼마나 많이 넣으려고합니까?. 내가 (또는 데이터 어떤 형태의 테이블) 테이블 데이터를 입력해야하는 경우

, 나는 .. DataGridView 그래서 것 같이 보입니다로 이동하거나 더 나은 것 :

enter image description here