En mi "post" del día 31 de agosto (Cómo utilizar los estilos visuales de Windows XP) explicaba cómo habilitar los estilos visuales de Windows XP en aplicaciones Windows Forms con la versión 1.1 de la plataforma .NET. Por los comentarios que he recibido estos últimos días deduzco que vendría bien dar algunos consejos más.
En concreto me han planteado las siguientes dudas:

1.- ¿Tengo que tener todos los controles con FlatStyle = System?

Sí. Es necesario o sino no se verán con el estilo de Windows XP. Así que no queda más remedio que fijar esta propiedad en todos los controles que dispongan de ella.

2.- Menudo aburrimiento recorrer uno por uno los controles para fijar esta propiedad... ¿Puedo hacer otra cosa?

Sí, puedes automatizar esta tarea. Me he tomado la libertad de escribir una pequeña rutina que hará precisamente esto. La he escrito en Visual Basic por probarla en un proyecto que estamos haciendo ahora en la empresa y que es en este lenguaje, pero traducirla a C# no reviste dificultad alguna:

Class clsVisualStyles

  Private
Sub New()
    'No hace nada. Lo creo así, privado, para que no se pueda instanciar
  End
Sub

  'Cambia los estilos de botones, etiquetas y grupos (y derivados) para que se adapten a Visual Styles de Windows XP
  'Hay otros controles que se adaptan automáticamente
  Public hared Sub ChangeFlatStyle(ByVal frm As
Control)
    Dim ctl As
Control
    For Each ctl In
frm.Controls
      If TypeOf ctl Is ButtonBase
Then
       
CType
(ctl, ButtonBase).FlatStyle = Windows.Forms.FlatStyle.System
      ElseIf TypeOf ctl Is Label
Then
       
CType
(ctl, Label).FlatStyle = Windows.Forms.FlatStyle.System
      ElseIf TypeOf ctl Is GroupBox
Then
       
CType
(ctl, GroupBox).FlatStyle = Windows.Forms.FlatStyle.System
      End
If

     
'Si el objeto es contenedor llamamos a esta misma función recursivamente
     
If ctl.Controls.Count > 0 Then
ChangeFlatStyle(ctl)
   
Next
  End
Sub
End
Class

De este modo sólo es necesario llamar a este método estático desde el método InitializeComponent o desde el evento Load de cualquier formulario pasándole un referencia a si mismo:

clsVisualStyles.ChangeFlatStyle(Me)

Se recorrerán todos sus controles y los hijos de éstos recursivamente (gracias Germán por hacérmelo notar) para modificar su propiedad FlatStyle. Dado que no todos los controles disponen de dicha propiedad es necesario hacerlo de esta forma ya que sólo los controles que heredan de ButtonBase, Label o GroupBox la poseen. Si a alguien se le ocurre un método mejor agradecería mucho que me lo hiciese llegar.

3.- ¿Y cómo hago para habilitar los estilos si uso la versión 1.0 de .NET?

En el anterior "post" ya apuntaba la forma de hacerlo: mediante un archivo '.manifest' con el nombre de nuestra aplicación. Por ejemplo, si disponemos de una aplicación llamada 'MiApplicacion.exe' y queremos que obtenga los estilos visuales de XP debemos crear un archivo de texto de nombre 'MiAplicacion.exe.manifest' cuyo contenido debe ser análogo al siguiente:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
        <assemblyIdentity
                name="CryptDecrypt Util"
                processorArchitecture="x86"
                version="1.0.1689.32606"
                type="win32"
        />

        <description>Utilidad de criptografía de KWAF</description>

        <dependency>
                <dependentAssembly>
                        <assemblyIdentity
                                type="win32"
                                name="Microsoft.Windows.Common-Controls"
                                version="6.0.0.0"
                                processorArchitecture="x86"
                                publicKeyToken="6595b64144ccf1df"
                                language="*"
                        />
                </dependentAssembly>
        </dependency>
</assembly>

He marcado en rojo las etiquetas que hay que cubrir obligatoriamente con el valor adecuado y en granate las que son opcionales pero de exisitr deberíamos cubrir de forma adecuada. Su significado es evidente.
OJO: No llega sólo con crear este archivo y copiarlo a la carpeta de la aplicación. Al igual que en el caso de la versión 1.1 es necesario cambiar la propiedad FlatStyle de los controles a System o no se verán los estilos visuales, por lo que la clase del punto 2 resultará igual de mucha utilidad.

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA