Как сделать элемент управления похожим на ComboBox с включенными визуальными стилями? - PullRequest
30 голосов
/ 06 августа 2008

У меня есть элемент управления, который смоделирован на ComboBox . Я хочу сделать элемент управления таким, чтобы элемент управления border выглядел так же, как стандартный Windows ComboBox . В частности, я следовал документации MSDN, и вся визуализация элемента управления является правильной, за исключением визуализации, когда элемент управления отключен.

Просто чтобы прояснить, это для системы с Визуальные стили . Кроме того, все части элемента управления отображаются правильно, за исключением границы вокруг отключенного элемента управления, которая не соответствует цвету Граница ComboBox .

Я использую VisualStyleRenderer класс. MSDN предлагает использовать элемент VisualStyleElement.TextBox для TextBox элемента управления ComboBox , но стандартно отключенный TextBox и стандартный отключенный ComboBox Нарисуйте немного по-другому (одна имеет светло-серую рамку, другая - голубую).

Как получить правильную визуализацию элемента управления в отключенном состоянии?

Ответы [ 2 ]

9 голосов
/ 17 августа 2008

Я не уверен на 100%, если это то, что вы ищете, но вы должны проверить VisualStyleRenderer в пространстве имен System.Windows.Forms.VisualStyles-.

  1. Класс VisualStyleRenderer (MSDN)
  2. Как: визуализировать элемент визуального стиля (MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)

Поскольку VisualStyleRenderer не будет работать, если у пользователя не включены визуальные стили (он может работать в «классическом режиме» или в операционной системе до Windows XP), у вас всегда должен быть запасной вариант к классу ControlPaint.

// Create the renderer.
if (VisualStyleInformation.IsSupportedByOS 
    && VisualStyleInformation.IsEnabledByUser) 
{
    renderer = new VisualStyleRenderer(
        VisualStyleElement.ComboBox.DropDownButton.Disabled);
}

и затем делайте так при рисовании:

if(renderer != null)
{
    // Use visual style renderer.
}
else
{
    // Use ControlPaint renderer.
}

Надеюсь, это поможет!

1 голос
/ 16 августа 2008

Можно ли использовать для этого какой-либо из методов ControlPaint ? Это то, что я обычно использую для пользовательских элементов управления.

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