2011-02-17 3 views
1

안녕하세요 저는 C#으로 코딩하고 있으며 문제가 있습니다.두 개의 양식을 사용하는 목록 상자에서 레이블로 C#

나는 두 가지 형태 (를 Form1과 Form2를)가, 첫 번째 폼 (Form1)는 목록 상자와 같은 몇 가지 레이블을 포함

Name: label1 
Phone: label2 
City: label3 

그리고 그렇게

그리고 두 번째 폼 (Form2를에)는 사용자가 이름, 전화 번호, 도시 이름을 채울 수있는 양식입니다.

그리고 사용자가 OK를 누르면 이름은 Form1의 목록 상자에만 표시되지만 사용자 목록 상자의 이름을 누르면 사용자가 입력 한 다른 정보가 visibl로 표시됩니다. 레이블에 e. 사용자가에서 Form2를 및 유형을 열 경우

그래서 :

Name: John 
Phone: 0011223344 
City: New York 

그리고 이름 요한이 목록 상자에 표시 beacome하지만 사용자가 목록 상자에서 존을 선택할 때 lables가 표시됩니다 확인을 누릅니다

Name: John 
Phone: 0011223344 
City: New York. 

희망을 보내 주시면 감사하겠습니다.

+0

레이블과 목록 상자가 같은 양식에 있습니까? –

답변

1

여기에 ListBox를 채우기 위해 문자열을 사용한다고 가정합니다. 실제로 데이터를 전달하는 방법을 알려주지 않습니다. 그래서

class Form2 
{ 
    public Person Person 
    { 
     get { return new Person() { Name = txtName.Text, PhoneNumber = txtPhone.Text, City = txtCity.Text }; } 
    } 
} 

Form1에 당신과 같은 그 속성을 사용할 수 있습니다 :

class Person 
{ 
    string Name { get; set; } 
    string PhoneNumber { get; set; } // perhaps not best as a string 
    string City { get; set; } 
} 

지금 Form2의에서 "사람"속성을 노출 대신 Form1에 다시 Form2를에서 문자열을 전달하는, 데이터 개체를 전달 그래서 :

using(Form2 frm = new Form2()) 
{ 
    if(frm.ShowDialog() == DialogResult.OK) 
    { 
     Person p = frm.Person; 
     list.Items.Add(p.Name); 
     lblName.Text = p.Name; 
     lblPhone.Text = p.PhoneNumber; 
     lblName.City = p.City; 
    } 
} 
+0

사람의 속성을 공개해야하지 않습니까? – rotman

+0

공개적입니다. 구문 오류로 인해 다시 살펴 보았지만 감사합니다. –

0

이 같은 몇 가지 일이 될 box.May 목록의의 SelectedIndexChanged 이벤트에 lables를 업데이트하는 코드를 작성해야 :

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      form2.label1.text = getname(listBox1.SelectedItem.ToString()); 
      form2.label2.text = getPhone(listBox1.SelectedItem.ToString()); 
      form2.label3.text = getCity(listBox1.SelectedItem.ToString()); 
     } 
0

난 100 % 내가의 레이아웃을 이해 확실하지 귀하 form1,하지만 어쩌면 당신은 어떤 데이터 바인딩을 원한다고 들리 네 인생을 더 쉽게 만들 수 있습니다.

Name, Phone, City 속성을 가진 Person이라는 클래스가 있다면. 그런 다음 목록 상자를 사용하는 대신 기본 양식의 데이터 격자를 사용하여 적절하게 스타일을 지정하고 목록에 바인딩 할 수 있습니다.

다음 레이블을 사용하여 새 Person을 데이터 소스에 추가 할 수 있지만 DataGrid에서 사람을 선택하고 레이블을 열에 바인딩 할 수도 있습니다 (예 :

this.lblName.Text = form1.datagrid.SelectedRows[0].Cell["Name"]; 

질문에 직접적으로 답변하지는 않지만 조금 더 좋은 방법 일 수 있습니다.

0

사용자가 Form2에서 확인을 클릭하면 방금 입력 한 데이터를 검색하여 Form1의 어딘가에 저장해야합니다.

내 조언은 Person 또는 이름, 전화 번호 및 도시 입력란이 포함 된 구조체 유형을 갖는 것입니다. 또한 ToString 메서드를 재정의하면 Name 필드가 반환됩니다.그런 다음 ListBox에 Person 객체를 추가 할 수 있습니다. 이름 만 ListBox에 나타나고 ListBox의 SelectedItem 속성은 Person 구조체를 반환하므로 선택한 항목에 필요한 모든 정보에 액세스 할 수 있습니다.

이제는 SelectedItem 속성의 데이터로 레이블을 채울 수있는 SelectedIndexChanged 이벤트를 처리해야합니다.

관련 문제