C# 在C中以编程方式声明组合框时,无法将selectedValue设置为初始状态#

C# 在C中以编程方式声明组合框时,无法将selectedValue设置为初始状态#,c#,winforms,combobox,selectedvalue,C#,Winforms,Combobox,Selectedvalue,这里有一个问题,当我在编码中创建一个组合框时,我发现我无法在绑定数据源后立即设置selectedValue。下面的代码用于帮助我解释问题 我想我已经发现了这个问题,这个问题可能是由于同步。这意味着这行代码(comboBox1.SelectedIndex=2)将在combobox数据源正确绑定之前执行,因此combobox在执行comboBox1.SelectedIndex=2时无法找到数据并生成错误。如果我错了,请纠正我 我的解决方案是在comboBox1.DataSource=data之后立即

这里有一个问题,当我在编码中创建一个组合框时,我发现我无法在绑定数据源后立即设置selectedValue。下面的代码用于帮助我解释问题

我想我已经发现了这个问题,这个问题可能是由于同步。这意味着这行代码(comboBox1.SelectedIndex=2)将在combobox数据源正确绑定之前执行,因此combobox在执行comboBox1.SelectedIndex=2时无法找到数据并生成错误。如果我错了,请纠正我

我的解决方案是在comboBox1.DataSource=data之后立即放置一个while循环,以确保combobox在进入下一行代码之前已正确绑定。我相信这不是一个好办法

还有其他更好的解决方案吗???提前感谢

public partial class Form2 : Form
{
    private ComboBox comboBox1 = new ComboBox();

    public Form2()
    {
        InitializeComponent();

        string[] data = { "a", "b", "c" };

        comboBox1.DataSource = data;

        //This line of code is used to confirm the data source 
        //is bind to the combo box
        while (comboBox1.DataSource == null) ;            

        comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;

        this.Controls.Add(comboBox1);

        comboBox1.SelectedIndex = 2;
    }

    void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        MessageBox.Show("");
    }
}

只需将
组合框.BindingContext
设置为虚拟实例

string[] data = { "a", "b", "c" };
comboBox1.BindingContext = new BindingContext();
comboBox1.DataSource = data;
comboBox1.SelectedIndex = 2;

请参见和

这似乎是示例代码中的一个输入错误,我认为您编写了
comboBox2
而不是
Combox1
哈哈,输入错误,谢谢@Benoit Blanchon,我已经更正了