ToolstripControlHost'ed Проблема переполнения CheckedListBox - PullRequest
0 голосов
/ 03 февраля 2011

У меня есть ToolStripDropDownButton, содержащий ToolStripControlHost, содержащий CheckedListBox в C #, например:

checkedListBox = new CheckedListBox();
dropDownButton = new ToolStripDropDownButton("Button");
host = new ToolStripControlHost(checkedListBox);
dropDownButton.DropDownItems.Add(host);

Все работает нормально, пока количество элементов в CheckedListBox не вырастет в контрольном списке за пределами экрана, и ToolStripDropDown не рисуеткрошечная кнопка треугольника вверху и внизу для прокрутки меню вверх или вниз.Всякий раз, когда я нажимаю для прокрутки, я выхожу на System.Windows.Forms.ToolStripItemCollection.this[].get с этим исключением:

Индекс был вне диапазона.Должен быть неотрицательным и меньшим, чем размер коллекции.Имя параметра: index

Я подозреваю, что поскольку ToolStripDropDownButton действительно имеет только один элемент (хост), это является причиной моего исключения.Если это так, есть ли у кого-нибудь обходные пути?

1 Ответ

0 голосов
/ 26 февраля 2011

Ваше предположение верно. Проблема в логике .NET , когда для отображения кнопок полосы прокрутки (в ToolStrip.SetDisplayedItems), которая:

bool verticallyContained = clientBounds.Contains(clientBounds.X, item.Bounds.Top) && 
                        clientBounds.Contains(clientBounds.X, item.Bounds.Bottom);
if (!verticallyContained) { 
    allContained = false;
}

Логика такова: «Если у нас есть элемент управления снизу, разрешите прокрутку». Однако для прокрутки до этого нет никакого дополнительного элемента управления.

Лучший ответ: «Не делай этого».


РЕДАКТИРОВАТЬ: Чтобы предотвратить сбой, создайте и добавьте второй ToolStripControlHost. Вы по-прежнему не сможете получить доступ к нижним элементам проверки, но, по крайней мере, приложение выживет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...