Hi
Like the title says, the combination of the SelectionChangedCommited event, and inside the event selecting another control (focus), causes to the combo box select another item that isn't the "selected" one.

To understand the problem, i have a combo box that is databinded to a datatable, the style it's dropdownlist, and the autocomplete property it's suggest and append, when the user starts typing i can see that the correct item it's selected, then the user press the Enter key, and commit the selection, looking to the code, the selected item it's the correct one, then i do everything that i need with the item and after that (all inside the event selecction changed committed), i set the focus in another control, in this case it's a textbox. After setting the focus in the textbox in the combobox the displayed item it's not the correct/"selected" one, even if the code used the right one...
If i remove the line to set the focus in the other control, everything works has expected.

The only event that i handle of the combo box it's the SelectionChangedCommitted.

I made some tests, and when I'm "typing" in the combo, the events for index changed and value changed are all firing has expected, and only commits the selection after pressing the Enter Key, and at this point, the item selected it's the same in the 3 events. And none of the events get fired again after setting the focus in the other control...

What i'm missing here?

I can solve the problem easily using and auxiliary var that stores the index selected, and then in the Got Focus off the other control, setting the correct index...

Sample Test Code, Form with one Combo and oneTextBox.
vb.net Code:
  1. Public Class Form1
  2.  
  3.     Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  4.         Dim dt As New DataTable("Teste")
  5.         dt.Columns.Add(New DataColumn("TestColumn"))
  6.         dt.Rows.Add({"11111"})
  7.         dt.Rows.Add({"12341"})
  8.         dt.Rows.Add({"34334"})
  9.         dt.Rows.Add({"55555"})
  10.         dt.Rows.Add({"55566"})
  11.         dt.Rows.Add({"88111"})
  12.         dt.Rows.Add({"99911"})
  13.  
  14.         With ComboBox1
  15.             .DropDownStyle = ComboBoxStyle.DropDownList
  16.             .AutoCompleteMode = AutoCompleteMode.SuggestAppend
  17.             .DisplayMember = "TestColumn"
  18.             .ValueMember = "TestColumn"
  19.             .DataSource = dt
  20.         End With
  21.     End Sub
  22.  
  23.    
  24.  
  25.     Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectionChangeCommitted
  26.         TextBox1.Text = ComboBox1.SelectedValue.ToString
  27.         'aux = ComboBox1.SelectedIndex 'WorkAround
  28.         TextBox1.Focus()
  29.     End Sub
  30.  
  31.     ''WorkAround
  32.     'Private aux As Integer = -1
  33.     'Private Sub TextBox1_GotFocus(sender As Object, e As System.EventArgs) Handles TextBox1.GotFocus
  34.     '    ComboBox1.SelectedIndex = aux
  35.     'End Sub
  36. End Class

To test, just press 5,5,5,6,ENTER. In the textbox it will have the 55566 has expected, but in the combo it will have another value...