.NET WinForm ComboBox - Как изменить поведение DropDown - PullRequest
2 голосов
/ 12 июля 2010

У меня довольно длинный список в ComboBox, и я хочу, чтобы поведение DropDown было другим.

Обычно, когда вы нажимаете стрелку, список раскрывается, показывая все параметры, начиная с выбранноговариант.Опции, перечисленные выше выбранной опции, скрыты, но их можно увидеть, прокручивая вверх.

Я хочу, чтобы список немного прокручивался вверх, показывая выбранную опцию в середине списка, когда это возможно.

Я видел способы сделать это с помощью FlowLayoutPanel с полосой прокрутки, но мне не повезло с DDL.Список насчитывает более 50 наименований, поэтому просто показывать весь список непрактично.

1 Ответ

1 голос
/ 12 июля 2010

На мой взгляд, вы можете добиться эффекта, используя собственный метод рисования.Под этим я подразумеваю, что вы присоединяете обработчик к событию DrawItem, затем в обработчике вы получаете все необходимые данные, которые вы хотите показать.После этого вы выводите его на экран.

Например:

private void myComboBox_DrawItem(object sender, DrawItemEventArgs e)
        {
            if ( boundDataSource.Count > 0 && e.Index >= 0 )
            {
              if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
                {
                    //Get the data here
                    string dataToShow=  GetDataToShow()

                    e.DrawFocusRectangle();

                    System.Drawing.Graphics g = e.Graphics;
                    Rectangle r = e.Bounds;             


                    e.Graphics.FillRectangle(new SolidBrush(Color.Blue), r);
                    g.DrawStringdataToShow, e.Font, Brushes.White, r, stringFormat);
                    e.DrawFocusRectangle();
                    g.Dispose();
                }



            }
        }
...