winfrom sunnyui 在线程里 给一个已经有下拉值的下拉框赋值,并且触发 下拉框值改变事件 第一次给的答案没有用
时间: 2024-03-12 19:45:49 浏览: 63
非常抱歉,我的上一个回答可能不太完整,以下是更完整的答案:
在 WinForm 中,界面控件只能在主线程中访问和修改,如果您需要在后台线程中修改控件的值并触发相应的事件,可以使用 `Control.Invoke` 或 `Control.BeginInvoke` 方法来将操作委托给主线程执行。以下是一个示例:
```
// 假设您已经创建了一个名为 comboBox1 的 ComboBox 控件,并在应用程序启动时为其添加了一些选项
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Items.Add("选项一");
comboBox1.Items.Add("选项二");
comboBox1.Items.Add("选项三");
}
// 在后台线程中修改下拉框的选中项并触发值改变事件
private void button1_Click(object sender, EventArgs e)
{
// 启动一个新线程执行操作
Thread thread = new Thread(new ThreadStart(SetComboBoxValue));
thread.Start();
}
private void SetComboBoxValue()
{
string valueToSelect = "选项二"; // 要赋值给下拉框的值
// 使用 Invoke 方法将操作委托给主线程执行
comboBox1.Invoke((Action)(() =>
{
comboBox1.SelectedValue = valueToSelect;
comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
comboBox1.SelectedIndex = comboBox1.FindStringExact(valueToSelect);
}));
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// 在这里处理下拉框值改变事件
}
```
在上述代码中,我们首先在应用程序启动时为下拉框添加了一些选项。然后,我们在点击按钮时启动一个新线程执行操作。在新线程中,我们使用 `Invoke` 方法将修改下拉框选中项和绑定值改变事件的操作委托给主线程执行。在操作完成后,会自动触发相应的事件。您可以根据自己的需求修改选项内容和要赋值的值。
阅读全文