Как визуализировать управление выглядеть ComboBox с поддержкой Visual Styles?

голоса
28

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

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

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

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

Задан 05/08/2008 в 22:19
источник пользователем
На других языках...                            


2 ответов

голоса
1

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

Ответил 16/08/2008 в 20:58
источник пользователем

голоса
8

Я не 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.
}

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

Ответил 16/08/2008 в 22:28
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more