C# 动态添加的标签不';不出现

C# 动态添加的标签不';不出现,c#,.net,winforms,C#,.net,Winforms,我有一些标签和一堆文本框,我想动态添加到面板中。文本框添加正常且完全可见,但标签不可见。下面是我用来添加标签的代码 该语言是为.NET3.5WinForms应用程序编写的 Label lblMotive = new Label(); lblMotive.Text = language.motive; lblMotive.Location = new Point(0, 0); Label lblDiagnosis = new Label(); lblDiagnosis.Text = langua

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

该语言是为.NET3.5WinForms应用程序编写的

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


我希望这些信息足以获得帮助。

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

我建议您将这些设置为硬编码值,或者首先检查以确保不存在null


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

看起来主要问题是添加到面板的控件的位置。
Location
属性保存控件左上边缘相对于父控件(添加子控件的控件)左上角的坐标。查看您的代码,您似乎在另一个控件之上添加了一个控件。请注意,您始终设置
lblDiagnosis.Location=新点(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);

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

我刚刚将您的代码放入一个空表单应用程序中,它工作得非常好:

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);
}

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

首先:确保
language.motive!=string.empty&&language.diagnosis!=string.empty
?第二:检查位置(0,0),您确定要将它们都放在同一位置吗?我想您必须检查标签的文本。您正在将标签添加到同一位置
新点(0,0)
。验证是否以后添加了文本框there@derape文本分别为“动机”和“诊断”。我已经检查过了,它们还可以。lazyberezovsky不要紧,那些只是我忘记更改的随机数,它们不会出现在任何地方,无论我放在哪里。正如我所说,这是我编写的自定义类,文本分别是“动机”和“诊断”。我已经检查过了,它们还可以。你确定面板是可见的吗?设置它的边框或检查它的大小。像这样的东西似乎确实有效。面板似乎不喜欢X轴或Y轴上的0坐标。谢谢你的帮助。是的,我想面板本身可能与一些控件重叠。已经解决,谢谢回复。@user1875162很高兴我能帮忙:)