2012-07-22 46 views
0

我是新来Visual C#和我目前坚持如何创建一个新的窗体(与代码,而不是设计),并添加东西(即标签和文本框)到这个新的窗体。这里是我现在所拥有的:Visual C#:如何将控件添加到使用代码创建的窗体?

namespace AccountInfo 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      profileForm profile = new profileForm(); // Make new form 
      profile.Name = "newProfile"; 
      profile.Text = "Add a new profile"; 
      profile.LabelText = "test"; 
      profile.Show();    // Display form 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 
    } 

    public class profileForm : Form 
    { 
     // Controls 
     Label label1 = new Label(); 

     public profileForm() 
     { 

     } 

     public string LabelText 
     { 
      set { label1.Text = value; } 
     } 

     private void profileForm_Load(object sender, EventArgs e) 
     { 

     } 
    } 
} 

当我运行此代码时,我得到默认窗体,然后单击button1。它带来了一种新的形式,但没有任何关系。我希望有一个标签出现,但不会。我尝试了多种不同的方式(这是我最近使用的方法),我无法得到任何东西显示出来。我浏览过StackOverflow,还有一个话题出现了,但是它的解决方案对我来说并不适用。我会很感激任何洞察力:)谢谢!

编辑:我也尝试过使用构造函数。它没有帮助。

+0

右键点击'的InitializeComponent();'和Goto定义(或F12)。你会看到表单设计器生成的代码。 – 2012-07-22 07:17:46

回答

3

您正在内存中创建一个Label对象,但您并未将其分配给特定的父控件,或者将其设置为位置等...... Google“动态创建控件C#”,您会发现一吨examples

你基本上需要从profileForm的某处调用以下两行。

label1.Location = new Point(25,25); 

    this.Controls.Add(label1); 
+0

啊,谢谢。我错过了Controls.Add行。我之前正在修补这个问题,但无法弄清楚它要我说什么。我在这里发布的代码有点少...比我之前搞乱的东西(所以如果它看起来像我没有尝试,情况并非如此:))。谢谢您的帮助! – MattM 2012-07-22 07:15:35

+0

不用担心。不要忘记接受答案!干杯。 – Dylan 2012-07-22 07:17:05

+0

哈哈,谢谢!新的StackOverflow以及...还没有发现它的所有错综复杂:) – MattM 2012-07-22 07:27:33

1

正如迪伦所说,你需要将Label对象添加到profileForm负载情况如下:

this.Controls.Add(label1); 
+0

是否有任何理由坚持这个加载事件,而不是构造函数?似乎有几种方法可以实现这个目标,但我不确定哪个是最好的,或者为什么... – MattM 2012-07-22 08:39:59

+0

没有理由在Load事件中拥有它。你甚至可以在构造函数中添加控件。 – Shant 2012-07-22 08:45:29