2010-10-08 12 views
6

Uso Windows 7, por lo que todas mis barras de progreso tienen ese aspecto verde. Sin embargo, me gustaría algo un poco más simplista, tal vez algo parecido a la barra de progreso de Windows 98.Barra de progreso de estilo Windows 98

¿Hay una manera simple de cambiar el estilo de la barra de progreso o tendré que volver a crearla manualmente?

+2

<3 Win98 Style :) –

Respuesta

7

No puede obtener fácilmente el exacto Win98 sin una reescritura bastante drástica del control. Pero se puede obtener una simple barra de progreso de color azul claro apagando los estilos visuales. De esta manera:

using System; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

class SimpleProgressBar : ProgressBar { 
    protected override void OnHandleCreated(EventArgs e) { 
     base.OnHandleCreated(e); 
     if (Environment.OSVersion.Version.Major >= 6) { 
      SetWindowTheme(this.Handle, "", ""); 
     } 
    } 
    [DllImport("uxtheme.dll")] 
    private static extern int SetWindowTheme(IntPtr hWnd, string appname, string idlist); 
} 
+1

O simplemente usando una versión anterior de comctl32. Aunque me gusta tu solución mucho mejor; es probablemente más robusto. – Brian

+0

Eso es realmente un efecto realmente agradable, y de hecho, en Win10 parece coincidir muy bien con el color de un elemento seleccionado en un ListBox, por lo que conserva un estilo coherente. – Nyerguds

0

No he probado esto ... en una máquina XP en este momento ... pero sospecho que si desactiva los "estilos de Windows XP" en la configuración del marco para su aplicación, obtendrá lo que está buscando .

+0

Quiero apagarlo para un elemento, no para todo. – Pieter

1

Paso 1: Download COMCTL32.ocx (versión 5). Creo que la Versión 5 es redistribuible, aunque la versión 6 creo que no. El que he vinculado probablemente no es el redista, pero ese es el que probé estos pasos.
Paso 2: Personalice su caja de herramientas y seleccione el archivo que descargó de la pestaña "Componentes de COM" (buscándolo).
Paso 3: Agregue una barra de progreso de las nuevas entradas de la caja de herramientas.

Nota: En el diseñador, se verá como una barra de progreso más nueva.

1

Me gusta la respuesta de Hans, pero no hay necesidad de anular la clase del control. Puede eliminar el estilo Win7 de un control individual simplemente llamando al SetWindowTheme usando el control del mango. Aquí hay un ejemplo:

using System; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

namespace MyApplication 
{ 
    public partial class Form1 : Form 
    { 
     [DllImport("uxtheme", ExactSpelling = true, CharSet = CharSet.Unicode)] 
     public extern static Int32 SetWindowTheme(IntPtr hWnd, 
         String textSubAppName, String textSubIdList); 

     public Form1() 
     { 
      InitializeComponent(); 

      // Remove Win7 formatting from the progress bar. 
      SetWindowTheme(progressBar1.Handle, "", ""); 
+0

Una excelente sugerencia. Me ahorra una clase de anulación. – Nyerguds