Como processar um controle para olhar como ComboBox com estilos visuais habilitado?

votos
28

Eu tenho um controle que é modelado em um ComboBox . Quero processar o controle para que o controle de fronteira se parece com a de um padrão ComboBox do Windows . Especificamente, eu tenho seguido a documentação MSDN e todo o processamento do controle está correta, exceto para renderização quando o controle está desativado.

Só para ficar claro, isto é para um sistema com estilos visuais ativado. Além disso, todas as partes do controle de processar corretamente exceto a borda em torno de um controle desativado, o que não coincide com os deficientes fronteira ComboBox cor.

Eu estou usando o VisualStyleRenderer classe. MSDN sugere a utilização do VisualStyleElement.TextBoxelemento para a caixa de texto parte da caixa de combinação de controlo, mas um deficientes padrão de caixa de texto e uma deficientes padrão caixa de combinação desenhar ligeiramente diferente (um tem uma borda cinzento-claro, o outro uma borda azul claro).

Como posso obter o processamento correto do controle em um estado desativado?

Publicado 05/08/2008 em 22:19
fonte usuário
Em outras línguas...                            


2 respostas

votos
8

Não estou 100% de certeza se é isso que você está procurando, mas você deve verificar se o VisualStyleRenderer na System.Windows.Forms.VisualStyles-namespace.

  1. Classe VisualStyleRenderer (MSDN)
  2. Como: Renda de um elemento de estilo visual (MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)

Desde VisualStyleRenderer não funcionará se o usuário não tem estilos visuais ativados (ele / ela pode estar em execução 'modo clássico' ou um sistema operativo anterior ao Windows XP), você deve sempre ter um fallback para a classe ControlPaint.

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

e depois fazer assim quando desenho:

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

Espero que ajude!

Respondeu 16/08/2008 em 22:28
fonte usuário

votos
1

Alguma das ControlPaint métodos úteis para isso? Isso é o que eu costumo usar para controles prestados sob medida.

Respondeu 16/08/2008 em 20:58
fonte usuário

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