5

我有一些标签和一堆文本框,我想动态添加到面板中。文本框添加正常并且完全可见,但标签不是。这是我用来添加标签的代码。

该语言是为 .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 是应该显示标签的面板控件,以及前面提到的文本框。语言是一个自写的语言类的对象,它工作正常,在这里无关紧要。

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

4

4 回答 4

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);
于 2012-12-04T09:42:15.987 回答
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);
}

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

于 2012-12-04T10:00:55.743 回答
0

您在“language.Motive”“language.diagnosis”中将文本设置为什么,这是来自资源文件还是字符串 const 或其他什么?

我建议您将这些设置为硬编码值或检查以确保先不为空。

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

于 2012-12-04T09:42:10.960 回答
0

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

于 2012-12-04T09:52:29.900 回答