public void ComboBoxItemAccessibleObject_ScrollIntoView_DoNothing_IfControlIsNotEnabled(ComboBoxStyle comboBoxStyle) { using ComboBox comboBox = new ComboBox(); comboBox.IntegralHeight = false; comboBox.DropDownStyle = comboBoxStyle; comboBox.Enabled = false; comboBox.Items.AddRange(new[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }); comboBox.CreateControl(); if (comboBoxStyle == ComboBoxStyle.Simple) { comboBox.Size = new Size(100, 132); } else { comboBox.DropDownHeight = 107; comboBox.DroppedDown = true; } ComboBoxAccessibleObject comboBoxAccessibleObject = (ComboBoxAccessibleObject)comboBox.AccessibilityObject; ComboBoxItemAccessibleObjectCollection itemsCollection = comboBoxAccessibleObject.ItemAccessibleObjects; Entry itemEntry = comboBox.Items.InnerList[10]; ComboBoxItemAccessibleObject itemAccessibleObject = itemsCollection.GetComboBoxItemAccessibleObject(itemEntry); itemAccessibleObject.ScrollIntoView(); int actual = unchecked ((int)(long)User32.SendMessageW(comboBox, (User32.WM)User32.CB.GETTOPINDEX)); Assert.Equal(0, actual); // ScrollIntoView didn't scroll to the tested item because the combobox is disabled }
public void ComboBoxItemAccessibleObject_ScrollIntoView_EnsureVisible(ComboBoxStyle comboBoxStyle, bool scrollingDown, int itemIndex, int itemsCount) { using ComboBox comboBox = new ComboBox(); comboBox.IntegralHeight = false; comboBox.DropDownStyle = comboBoxStyle; comboBox.CreateControl(); for (int i = 0; i < itemsCount; i++) { comboBox.Items.Add(i); } if (comboBoxStyle == ComboBoxStyle.Simple) { comboBox.Size = new Size(100, 132); } else { comboBox.DropDownHeight = 107; comboBox.DroppedDown = true; } ComboBoxAccessibleObject comboBoxAccessibleObject = (ComboBoxAccessibleObject)comboBox.AccessibilityObject; ComboBoxItemAccessibleObjectCollection itemsCollection = comboBoxAccessibleObject.ItemAccessibleObjects; Entry itemEntry = comboBox.Items.InnerList[itemIndex]; ComboBoxItemAccessibleObject itemAccessibleObject = itemsCollection.GetComboBoxItemAccessibleObject(itemEntry); int expected; Rectangle dropDownRect = comboBox.ChildListAccessibleObject.Bounds; int visibleItemsCount = (int)Math.Ceiling((double)dropDownRect.Height / comboBox.ItemHeight); // Get an index of the first item that is visible if dropdown is scrolled to the bottom int lastFirstVisible = itemsCount - visibleItemsCount; if (scrollingDown) { if (dropDownRect.IntersectsWith(itemAccessibleObject.Bounds)) { // ScrollIntoView method shouldn't scroll to the item because it is already visible expected = 0; } else { // ScrollIntoView method should scroll to the item or // the first item that is visible if dropdown is scrolled to the bottom expected = itemIndex > lastFirstVisible ? lastFirstVisible : itemIndex; } } else { // Scroll to the bottom and test the method when scrolling up User32.SendMessageW(comboBox, (User32.WM)User32.CB.SETTOPINDEX, (IntPtr)(itemsCount - 1)); if (dropDownRect.IntersectsWith(itemAccessibleObject.Bounds)) { // ScrollIntoView method shouldn't scroll to the item because it is already visible expected = lastFirstVisible; } else { // ScrollIntoView method should scroll to the item expected = itemIndex; } } itemAccessibleObject.ScrollIntoView(); int actual = unchecked ((int)(long)User32.SendMessageW(comboBox, (User32.WM)User32.CB.GETTOPINDEX)); Assert.Equal(expected, actual); }