C# ComboBox SelectedIndexChanged事件为具有相同DisplayMember的项目激发了两次

C# ComboBox SelectedIndexChanged事件为具有相同DisplayMember的项目激发了两次,c#,winforms,combobox,C#,Winforms,Combobox,我有一个组合框,如下所示,包含3项(“abc”、“abc”和“bbb”)。 组合框还具有自动完成模式“SuggestAppend”和自动完成源“ListItems”属性。现在,我希望文本框显示组合框的SelectedIndex,如下所示: 在我选择第二个“abc”之前,一切似乎都很好,SelectedIndexChanged事件将第一次输入并在文本框中正确显示索引。但当组合框失去焦点时,SelectedIndexChanged事件将再次触发,导致索引显示错误。我发现它只发生在具有相同值的项目上

我有一个组合框,如下所示,包含3项(“abc”、“abc”和“bbb”)。 组合框还具有自动完成模式“SuggestAppend”和自动完成源“ListItems”属性。现在,我希望文本框显示组合框的SelectedIndex,如下所示:

在我选择第二个“abc”之前,一切似乎都很好,SelectedIndexChanged事件将第一次输入并在文本框中正确显示索引。但当组合框失去焦点时,SelectedIndexChanged事件将再次触发,导致索引显示错误。我发现它只发生在具有相同值的项目上。有没有办法阻止事件两次触发


将comboBox1_SelectedIndexChanged代码放入comboBox1_ValueChanged中,您将在事件参数中获得索引(发送方,即您的comboBox将其转换为comboBox)


使用comboBox1.SelectedIndex,您将获得索引。

为什么有一个包含相同值的Combox1?在您的selectionchange方法中尝试e.Handled=true它是win格式的。。。在哪里可以找到我的xaml代码p SelectedIndexChanged似乎没有e.处理按键参数?。。。。我需要有相同的值,因为组合框的唯一性在“ValueMember”中,而不是在“DisplayMember”中。请尝试使用SelectionChangeCommitted,它应该只在SelectionChangeCommitted不太合适时触发,因为组合框的“DropDownStyle”是“DropDown”,因此,如果用户在“SelectedValueChanged”事件中键入值,索引将不会更改,因为我有两个值相同的项目。。。。。。我想我现在唯一能做的就是关闭combobox=/value的“AutoCompleteMode”和“AutoCompleteSource”,如果关键成员是唯一的,那么它是冗余字段,不是一个好的做法。所以一定要创建一个唯一的密钥。
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.textBox1.Text = this.comboBox1.SelectedIndex.ToString(); 
    }
            this.comboBox1.DataSource = dt;
            this.comboBox1.DisplayMember = "Description"; //Some descriptive field to be shown in combobox
            this.comboBox1.ValueMember = "Code"; //Unique code that user won't understand
            this.comboBox1.SelectedIndex = -1;