在form_load中填充组合框,但触发selectedvaluechange

本文关键字:selectedvaluechange 组合 form load 填充 | 更新日期: 2023-09-27 18:19:08

我想填充一些键/值从一个数据表到一个组合框时,表单加载。并且期望当用户在组合框上进行选择时,在SelectedValueChanged事件中执行一些语句。

但是,当我使用以下方式填充数据时:

    private void Form1_Load(object sender, EventArgs e)
    {
        comboBox1.DropDownStyle =  ComboBoxStyle.DropDownList;
        DataTable dt = new DataTable();
        dt.Columns.Add("id", typeof(int));
        dt.Columns.Add("name", typeof(string));
        dt.Rows.Add(1, "A1");
        dt.Rows.Add(2, "A2");
        comboBox1.DataSource = dt;
        comboBox1.DisplayMember = "name";
        comboBox1.ValueMember = "id";   
    }

使用以下SelectedValueChanged事件:

    private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
    {
        MessageBox.Show("FOO");
    }

程序运行后,在用户可以选择任何内容之前,"foo"消息框意外地显示两次。

有什么问题吗?

Thx

在form_load中填充组合框,但触发selectedvaluechange

问题是由于设计,当您的组合框更新了新的项目,它的SelectedValue是由设计改变的。为了防止这种情况,你可以使用类似这样的标志:

private bool init;
 private void Form1_Load(object sender, EventArgs e)
{
    comboBox1.DropDownStyle =  ComboBoxStyle.DropDownList;
    DataTable dt = new DataTable();
    dt.Columns.Add("id", typeof(int));
    dt.Columns.Add("name", typeof(string));
    dt.Rows.Add(1, "A1");
    dt.Rows.Add(2, "A2");
    init = true;
    comboBox1.DataSource = dt;
    comboBox1.DisplayMember = "name";
    comboBox1.ValueMember = "id";   
    init = false;
}
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
    if(!init) MessageBox.Show("FOO");
}

通过设计器,在Form_Load事件处理程序末尾填充ComboBox后注册您的事件处理程序:

private void Form1_Load(object sender, EventArgs e)
{
    comboBox1.DropDownStyle =  ComboBoxStyle.DropDownList;
    DataTable dt = new DataTable();
    dt.Columns.Add("id", typeof(int));
    dt.Columns.Add("name", typeof(string));
    dt.Rows.Add(1, "A1");
    dt.Rows.Add(2, "A2");
    comboBox1.DataSource = dt;
    comboBox1.DisplayMember = "name";
    comboBox1.ValueMember = "id";
    comboBox1.SelectedValueChanged += comboBox1_SelectedValueChanged   
}
添加到king的回答..
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
    if(init) Return;
    //codes here
}
相关文章:
  • 没有找到相关文章