动态添加的标签不会出现

时间:2012-12-04 09:36:51

标签: c# .net winforms

我有一些标签和一堆TextBox,我想动态添加到Panel。 TextBoxes添加正常并且完全可见,但标签不是。这是我用来添加标签的代码。

该语言是为.NET 3.5 WinForms应用程序编写的C#。

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控件,以及前面提到的TextBoxes。语言是自编语言类的一个对象,它在这里工作正常并且无关紧要。

我希望有足够的信息来获得帮助。

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);
}

您的代码还有其他问题,我们无法从您发布的代码中看到。

答案 2 :(得分:0)

你在'language.Motive''language.diagnosis'中将文本设置为什么来自资源文件或字符串const或什么?

我建议你将它们设置为硬编码值或检查以确保首先不为空。

同时尝试更改文本框的位置,因为它们可能相互重叠。

答案 3 :(得分:0)

是否有必要在运行时添加标签?一种更简单的方法是在表单设计器中添加标签并在运行时更新文本。如果在设计时不知道所需的标签数量,则可能更适合使用不同的控件,例如ListBox或DataGridView。或者,查看FlowLayoutPanel作为标签的替代容器;与常规Panel不同,它会自动管理控件的布局。