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

本文关键字:初始状态 selectedValue 设置 编程 声明 方式 组合 | 更新日期: 2023-09-27 18:34:57

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

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

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

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

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("");
    }
}

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

只需将ComboBox.BindingContext设置为虚拟实例即可。

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

请参阅 ComboBox.DataSource 属性和 BindingContext 类