Il supporto per i Temi di Windows è presente nelle applicazioni Windows Forms sin dalla versione 1.0 del Framework .net. Dalla versione 1.1, per evitare l'onere di aggiungere un file .manifest da distribuire con l'applicazione, è stato introdotto il metodo EnableVisualStyles() della classe Application. L'abilitazione dei temi, però, soffriva di un fastidioso bug, che consisteva nella "sparizione" delle icone delle toolbar presenti nella nostra applicazione. Tale bug può essere risolto richiamando Application.DoEvents() appena dopo Application.EnableVisualStyles().
Nel Framework 2.0 il bug è stato risolto, ma ieri sera ho comunque trovato dei problemi relativi ai controlli ListView e TreeView, ovvero le icone sparivano nuovamente. Da notare che le toolbar funzionavano perfettamente visualizzando le icone. Il problema sembra infatti collegato all'uso del controllo ImageList. Se qualcuno si trovasse nella stessa situazione, consideri che il problema è scomparso nel momento stesso in cui ho spostato la chiamata Application.EnableVisualStyles() da un metodo che avevo creato alla prima riga del metodo Main, entry point dell'applicazione:
<STAThread()>Public Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(new MainForm())
End Sub
Il problema sembra dovuto al fatto che nella mia applicazione richiamavo codice relativo alle funzionalità delle Windows Forms prima della chiamata ad EnableVisualStyles(). Quindi è fortemente consigliato, qualora vogliate realizzare un'applicazione Windows Forms che faccia uso di temi ed utilizzi un metodo Main come entry point, richiamare come prima istruzione del metodo Main la Application.EnableVisualStyles().