Skip to content

Commit

Permalink
[WinForms] No event should be triggered when calling ComboBox.Items.…
Browse files Browse the repository at this point in the history
…RemoteAt() (#18069)

* [WinForms] Fix wrong behavior when calling ComboBox.Items.RemoteAt() with index equals to SelectedIndex

* [WinForms] Fix #10643 No event should be triggered when calling ComboBox.Items.RemoteAt()

Fixes #10643
  • Loading branch information
abrevet-dev authored and akoeplinger committed Dec 9, 2019
1 parent 612f2a8 commit 3d83c74
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 7 deletions.
14 changes: 7 additions & 7 deletions mcs/class/System.Windows.Forms/System.Windows.Forms/ComboBox.cs
Expand Up @@ -1695,7 +1695,7 @@ private void OnKeyDownCB(object sender, KeyEventArgs e)
}
}

void SetSelectedIndex (int value, bool supressAutoScroll)
void SetSelectedIndex (int value, bool supressAutoScroll, bool triggerEvents = true)
{
if (selected_index == value)
return;
Expand All @@ -1718,9 +1718,11 @@ void SetSelectedIndex (int value, bool supressAutoScroll)
if (listbox_ctrl != null)
listbox_ctrl.HighlightedIndex = value;

OnSelectedValueChanged (EventArgs.Empty);
OnSelectedIndexChanged (EventArgs.Empty);
OnSelectedItemChanged (EventArgs.Empty);
if (triggerEvents) {
OnSelectedValueChanged (EventArgs.Empty);
OnSelectedIndexChanged (EventArgs.Empty);
OnSelectedItemChanged (EventArgs.Empty);
}
}

// If no item is currently selected, and an item is found matching the text
Expand Down Expand Up @@ -2134,9 +2136,7 @@ public void RemoveAt (int index)
throw new ArgumentOutOfRangeException ("index");

if (index < owner.SelectedIndex)
--owner.SelectedIndex;
else if (index == owner.SelectedIndex)
owner.SelectedIndex = -1;
owner.SetSelectedIndex (owner.SelectedIndex - 1, false, false);

object removed = object_items [index];

Expand Down
Expand Up @@ -732,6 +732,22 @@ public void GetItemHeightTest ()
Assert.IsTrue (cmbbox.ItemHeight > 0, "#21");
}

[Test]
public void RemoveAt_SelectedIndex ()
{
ComboBox cmbbox = new ComboBox ();
cmbbox.Items.AddRange (new object[] {"1", "2", "3"});
cmbbox.SelectedIndex = 0;
cmbbox.Items.RemoveAt (0);
Assert.AreEqual (0, cmbbox.SelectedIndex, "#A1");

cmbbox.Items.Clear ();
cmbbox.Items.AddRange (new object[] {"1", "2", "3"});
cmbbox.SelectedIndex = 2;
cmbbox.Items.RemoveAt (0);
Assert.AreEqual (1, cmbbox.SelectedIndex, "#A2");
}

//
// Exceptions
//
Expand Down

0 comments on commit 3d83c74

Please sign in to comment.