2012-12-04 6 views
4

레이블이 몇 개 있고 동적으로 패널에 추가 할 TextBox 집합이 있습니다. TextBoxes가 추가되어 완벽하게 표시되지만 레이블은 표시되지 않습니다. 다음은 레이블을 추가 할 때 사용하는 코드입니다.동적으로 추가 된 레이블이 표시되지 않습니다.

언어는 C#으로 .NET 3.5 WinForms 응용 프로그램 용으로 작성되었습니다.

Label lblMotive = new Label(); 
lblMotive.Text = language.motive; 
lblMotive.Location = new Point(0, 0); 

Label lblDiagnosis = new Label(); 
lblDiagnosis.Text = language.diagnosis; 
lblDiagnosis.Location = new Point(20, 0); 

panelServiceMotive.Controls.Add(lblMotive); 
panelServiceMotive.Controls.Add(lblDiagnosis); 

panelServiceMotive는 앞서 언급 한 텍스트 상자와 함께 레이블을 표시해야하는 Panel 컨트롤입니다. 언어는 자기가 작성한 Language 클래스의 객체로 OK는 작동하지 않으며 여기서는 부적합합니다.

도움을 얻으려면 충분한 정보가되기를 바랍니다.

+0

먼저 :'language.motive! = string.empty && language.diagnosis! = string.empty'가 맞는지 확인하십시오. 두 번째 : 위치 (0,0)를 확인하십시오. 둘 다 같은 위치에두고 싶습니까? – derape

+0

레이블의 텍스트를 확인해야한다고 생각합니다. –

+0

같은 위치'new Point (0, 0)'에 레이블을 추가하고 있습니다. 어쩌면 나중에 거기에 텍스트 상자가 추가되었는지 확인하십시오. –

답변

0

텍스트를 'language.Motive' 'language.diagnosis'로 설정하면 리소스 파일이나 문자열 const 또는 기타에서 오는 것입니까?

하드 코딩 된 값으로 설정하거나 먼저 null이 없는지 확인하는 것이 좋습니다.

텍스트 상자가 서로 겹칠 수 있으므로 텍스트 상자의 위치를 ​​변경해보십시오.

+0

제가 말했듯이, 그것은 제가 작성한 커스텀 클래스이고, 텍스트는 각각 "동기"와 "진단"입니다. 나는 그것들을 검사했고 그들은 괜찮습니다. – user1875162

1

주요 문제는 패널에 추가하는 컨트롤의 위치와 같습니다. Location 속성은 부모 컨트롤 (자식 컨트롤을 추가하는 컨트롤)의 왼쪽 위 모퉁이를 기준으로 컨트롤의 왼쪽 위 가장자리 좌표를 유지합니다. 코드를 보면 컨트롤을 다른 컨트롤 위에 추가하는 것처럼 보입니다. 항상 lblDiagnosis.Location = new Point(0, 0);으로 설정합니다. 코드에서 컨트롤을 추가하면 추가 한 첫 번째 컨트롤은 디자이너를 사용할 때와 달리 같은 위치에 추가 한 다른 컨트롤을 모두 포함합니다.

Label lblMotive = new Label(); 
lblMotive.Text = language.motive; 
lblMotive.Location = new Point(0, 40); 

Label lblDiagnosis = new Label(); 
lblDiagnosis.Text = language.diagnosis; 
lblDiagnosis.Location = new Point(0, lblMotive.Location.Y + lblMotive.Size.Height + 10); 

panelServiceMotive.Controls.Add(lblMotive); 
panelServiceMotive.Controls.Add(lblDiagnosis); 
+0

패널이 표시되어 있습니까? 테두리를 설정하거나 크기를 확인하십시오. –

+0

이런 식으로 작동하는 것 같습니다.패널이 X 축 또는 Y 축의 0 좌표를 좋아하지 않는 것 같습니다. 도와 주셔서 감사합니다. – user1875162

0

는 런타임에 레이블을 추가 할 필요가있다 : 레이블이 확인하는 경우 확인이 뭔가를 시도 할 수

? 보다 간단한 접근법은 폼 디자이너에 레이블을 추가하고 런타임에 텍스트를 업데이트하는 것입니다. 디자인 타임에 필요한 레이블 수를 알 수없는 경우 ListBox 또는 DataGridView와 같은 다른 컨트롤이 더 적합 할 수 있습니다. 또는 라벨의 대체 용기로 FlowLayoutPanel을보십시오. 일반 패널과 달리 컨트롤의 레이아웃을 자동으로 관리합니다.

1

난 그냥 빈 양식 응용 프로그램에 코드를 던져 버리고 완벽하게 잘 작동 : 다른

private void button1_Click(object sender, EventArgs e) 
{ 
    Panel panelServiceMotive = new Panel(); 

    Label lblMotive = new Label(); 
    lblMotive.Text = "motive"; 
    lblMotive.Location = new Point(0, 0); 

    Label lblDiagnosis = new Label(); 
    lblDiagnosis.Text = "language"; 
    lblDiagnosis.Location = new Point(100, 0); 

    panelServiceMotive.Controls.Add(lblMotive); 
    panelServiceMotive.Controls.Add(lblDiagnosis); 

    this.Controls.Add(panelServiceMotive); 
} 

뭔가 우리가 당신의 게시 된 코드에서 볼 수없는 코드를 잘못해야합니다.

+0

예, 패널 자체가 일부 컨트롤과 겹칠 수도 있습니다. 이미 해결되었습니다. 답장을 보내 주셔서 감사합니다. – user1875162

+0

@ user1875162 기꺼이 도와 드리겠습니다 :) – derape

관련 문제