C# windows窗体列表框未创建时添加项目

C# windows窗体列表框未创建时添加项目,c#,windows,winforms,C#,Windows,Winforms,我想知道它是怎么工作的 public Form1() { InitializeComponent(); listBox1.Items.Add(listBox1.Created.ToString()); } 它打印false为什么?何时创建此控件?我想初始化组件()创建控件。但它喜欢我不完全创建控件!以及在未创建项目时如何添加项目??? 注:我问这个问题是因为我喜欢使用构造函数中的listBox1.Invoke来打印一些日志。我使用invoke,因为我的程序使用多个线程。但请关注

我想知道它是怎么工作的

public Form1()
{
    InitializeComponent();
    listBox1.Items.Add(listBox1.Created.ToString());
}
它打印
false
为什么?何时创建此控件?我想
初始化组件()
创建控件。但它喜欢我不完全创建控件!以及在未创建项目时如何添加项目???

注:我问这个问题是因为我喜欢使用构造函数中的
listBox1.Invoke
来打印一些日志。我使用
invoke
,因为我的程序使用多个线程。但请关注我的问题,而不是我为什么需要它。谢谢

因为在``()
期间,object
listBox1`是唯一的构造,位于堆上并已定义。 你基本上可以用

InitializeComponent();
listBox1.Items.Add(listBox1是对象)//返回true
但整个表单是在
表单
构造函数之后呈现的。 您可以通过不在构造函数中编写代码来避免这个问题(因为基本上它应该构造对象,而不是做其他事情)。 将代码编写为加载时的反应事件,而不是构造函数,如下所示:

public Form1()
{
初始化组件();
listBox1.Items.Add(listBox1.Created.ToString());
此.Load+=表格1\U Load;
}
私有void Form1\u加载(对象发送方、事件参数e)
{
listBox1.Items.Add(listBox1.Created.ToString());
}
Load事件在构造后被调用(而方法
Application.Run(new Form1());
si被调用),并且您可以保证所有内容都已创建

未创建项目时如何添加项目? 基本上是因为将项添加到列表框是分开的,以便添加到集合并呈现它

此代码添加所有项,然后调用渲染

for(int i=0;i<10;i++)
{
listBox1.Items.Add(i.ToString());
睡眠(200);
}
因此,您可以添加一个项,因为内存存在,并且不调用渲染。 创建可视listbox1后,将使用项目呈现


调用期间引发异常的原因基本上是listbox构造的未完成。我认为这只是一种安全预防措施。

重写表单的
OnCreateControl()
方法,而不是使用其构造函数。谢谢您的回答。我已经知道我可以使用form_load事件。但这个问题的重点是如何将项添加到未创建的控件中,但它接受并显示它!而我不能用invoke来做这个!这很复杂!