C# 为什么不能';我不能在Winform中访问组合框吗?

C# 为什么不能';我不能在Winform中访问组合框吗?,c#,windows,visual-studio,winforms,C#,Windows,Visual Studio,Winforms,form1有三个组合框。在表单中,我尝试创建以下代码 public partial class Form1 : Form { private List<ComboBox> comboBoxes = new List<ComboBox>() { combobox1,combobox2,combobox3 }; } 但是我可以在函数中访问这些组合框。我想创建组合框列表。告诉我为什么无法访问它,以及如何实现这一点?:实例字段不能用于初

form1有三个组合框。在表单中,我尝试创建以下代码

public partial class Form1 : Form
{
    private List<ComboBox> comboBoxes = new List<ComboBox>() 
    {
        combobox1,combobox2,combobox3
    };
}
但是我可以在函数中访问这些组合框。我想创建组合框列表。告诉我为什么无法访问它,以及如何实现这一点?

:实例字段不能用于初始化方法之外的其他实例字段

初始化控件后,可以在构造函数中初始化列表:

public partial class Form1 : Form
{
    public Form1()
    {
        //...
        comboBoxes = new List<ComboBox>() { combobox1,combobox2,combobox3 };
    }
}
公共部分类表单1:表单
{
公共表格1()
{
//...
comboBoxes=新列表(){combobox1,combobox2,combobox3};
}
}
:实例字段不能用于初始化方法之外的其他实例字段

初始化控件后,可以在构造函数中初始化列表:

public partial class Form1 : Form
{
    public Form1()
    {
        //...
        comboBoxes = new List<ComboBox>() { combobox1,combobox2,combobox3 };
    }
}
公共部分类表单1:表单
{
公共表格1()
{
//...
comboBoxes=新列表(){combobox1,combobox2,combobox3};
}
}

您需要在方法中添加控件

        public List<ComboBox> comboBoxes = new List<ComboBox>()

        public Form1()
        {
            InitializeComponent();

            comboBoxes.AddRange(new ComboBox[] {comboBox1, comboBox2, comboBox3});
        }
公共列表组合框=新列表()
公共表格1()
{
初始化组件();
AddRange(新的组合框[]{comboBox1,comboBox2,comboBox3});
}

您需要在方法中添加控件

        public List<ComboBox> comboBoxes = new List<ComboBox>()

        public Form1()
        {
            InitializeComponent();

            comboBoxes.AddRange(new ComboBox[] {comboBox1, comboBox2, comboBox3});
        }
公共列表组合框=新列表()
公共表格1()
{
初始化组件();
AddRange(新的组合框[]{comboBox1,comboBox2,comboBox3});
}

我在问为什么我不能在函数中访问它。@prabhakaran因为编译器的限制:
实例字段不能用于初始化方法之外的其他实例字段
不能保证
combobox1、combobox2、combobox3
已初始化(因为将同时初始化
组合框
组合框
)。这就是为什么编译器没有像这样编译代码。我在问为什么当我可以在函数中访问它时我不能访问它。@prabhakaran因为编译器的限制:
实例字段不能用于初始化方法之外的其他实例字段
没有保证,
combobox1、combobox2、combobox3
是已初始化(因为
组合框
组合框
将同时初始化)。这就是为什么编译器不会像这样编译代码。字段是在类构造函数之前初始化的。这些引用还不存在。您可以编写
列表组合框=新列表(){new combobox(),new combobox()};
。没那么有用,对吧?无论如何你都应该重新设置这些引用。这是一条语言规则,旨在让你避免麻烦。真正的麻烦是,.NET运行时实际上不支持这种复杂的字段初始化,C编译器通过将代码移到构造函数来解决它。运行的第一件事是,在任何代码之前您可以在构造函数中写入(如果有)。问题是,combobox1(etc)变量尚未初始化,仍然为null。InitializeComponent()方法稍后运行。解决方法很简单,只需将赋值移到InitializeComponent()之后call.Fields在类构造函数之前初始化。这些引用尚不存在。您可以编写
List ComboBox=new List(){new ComboBox(),new ComboBox()};
。没那么有用,对吧?无论如何你都应该重新设置这些引用。这是一条语言规则,旨在让你避免麻烦。真正的麻烦是,.NET运行时实际上不支持这种复杂的字段初始化,C编译器通过将代码移到构造函数来解决它。运行的第一件事是,在任何代码之前您可以在构造函数中写入(如果有)。问题是,combobox1(etc)变量尚未初始化,仍然为null。InitializeComponent()方法稍后运行。解决方法很简单,只需在InitializeComponent()调用后移动赋值。