我有一些标签和一堆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。语言是自编语言类的一个对象,它在这里工作正常并且无关紧要。
我希望有足够的信息来获得帮助。
答案 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不同,它会自动管理控件的布局。