dotnet/winforms

ComboBox internal state not consistent when inserting at SelectedIndex and IsHandleCreated == false

Open

#6.689 geöffnet am 13. Feb. 2022

Auf GitHub ansehen
 (3 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)C# (922 Forks)batch import
:books: documentationhelp wanted

Repository-Metriken

Stars
 (4.100 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 14T 22h) (56 gemergte PRs in 30 T)

Beschreibung

  • .NET Core Version: 6.0.101
  • Have you experienced this same bug with .NET Framework?: Yes

Problem description:

Add items to the ComboBox and select one:

comboBox1.Items.Add("Item 1");
comboBox1.Items.Add("Item 2");
comboBox1.Items.Add("Item 3");

comboBox1.SelectedIndex = 1;

Now insert at the selected index: comboBox1.Items.Insert(1, "Test");

If the handle has been created:

  • Item will be inserted into collection
  • SelectedIndex will increment
  • SelectedItem and Text remain consistent

If the handle has not been created:

  • Item will be inserted into collection
  • SelectedIndex will remain the same
  • SelectedItem will be the newly inserted item
  • Text will match the old SelectedItem

Issue discovered while adding events to Items collection (#6673)

Expected behavior:

  • Internal state of control should remain consistent
  • Behavior when handle has not yet been created should match that of when it has been

Minimal repro:

  • Create new WinForms project
  • Add the following to Main just after ApplicationConfiguration.Initialize();
var comboBox = new ComboBox();

comboBox.Items.Add("Item 1");
comboBox.Items.Add("Item 2");
comboBox.Items.Add("Item 3");
comboBox.SelectedIndex = 1;

comboBox.Items.Insert(1, "Test");
  • Set a breakpoint on comboBox.Items.Insert(1, "Test");
  • Observe the values of SelectedIndex, SelectedItem and Text before and after that line executes

Contributor Guide