我正在尝试以编程方式创建Windows窗体控件,而不使用WinForms Designer,但由于某些奇怪的原因,似乎没有任何控件被初始化。
当控件被拖入设计器时(很明显,当InitializeComponent()
方法取消注释时),它们会出现,但是在外面以编程方式完成的任何操作都不会出现。
我已经完成了调试,代码运行没有任何错误,但标签没有出现。
问题:我错过了什么吗?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinForm_Console
{
public partial class Form1 : Form
{
public Form1()
{
// InitializeComponent();
Initialize();
}
Label label1 = new Label();
public void Initialize()
{
this.Text = "WinForm Console Application";
SuspendLayout();
label1.AutoSize = true;
label1.Location = new System.Drawing.Point(129, 112);
label1.Name = "label1";
label1.Size = new System.Drawing.Size(35, 13);
label1.TabIndex = 0;
label1.Text = "label1";
label1.Show();
ResumeLayout(false);
PerformLayout();
}
}
}
请注意,在我的原始尝试失败之后,这些代码中的一些是从设计器复制的(没有额外信息是相同的;初始标签,大小,逻辑挂起等)。
答案 0 :(得分:2)
您必须将控件放在父控件Form
中。创建标签后,执行此操作。
this.Controls.Add(label1);
像这样,
public void Initialize()
{
this.Text = "WinForm Console Application";
SuspendLayout();
label1.AutoSize = true;
label1.Location = new System.Drawing.Point(129, 112);
label1.Name = "label1";
label1.Size = new System.Drawing.Size(35, 13);
label1.TabIndex = 0;
label1.Text = "label1";
label1.Show();
this.Controls.Add(label1); //very very very important line!
ResumeLayout(false);
PerformLayout();
}