2013-04-24 5 views

risposta

7

Sì, sono & hellip; con un paio di eccezioni.

Alcune cose in WinForms sono disegnate su misura. Usano il controllo nativo, ma attivano il disegno proprietario e gestiscono internamente alcune logiche di disegno nel codice C#. Il vantaggio di ciò è che consente a cose come i pulsanti di avere una proprietà BackColor che supporta un colore definito dall'utente invece del colore di sistema standard. Generalmente, questo dovrebbe essere evitato (almeno secondo me) perché non solo l'effetto è brutto, c'è probabilmente una ragione per cui l'utente ha scelto la combinazione di colori che ha fatto. Ma i progettisti grafici spesso pensano di conoscersi meglio degli utenti, quindi l'opzione esiste.

I controlli implementati in questo modo espongono spesso una proprietà FlatStyle che consente di modificare il modo in cui vengono disegnati (ad esempio, ButtonBase.FlatStyle). Con FlatStyle.Standard, .NET Framework esegue il normale disegno del proprietario, anche se non è stata personalizzata nessuna delle proprietà del controllo con impostazioni insolite. Con FlatStyle.System, il controllo viene eseguito direttamente da Win32 senza alcun disegno proprietario o altre sostituzioni.

È possibile distinguere la differenza sui pulsanti abbastanza facilmente. Se impostato su FlatStyle.System, l'effetto di passaggio del mouse sui pulsanti si dissolve gradualmente in entrata e in uscita. Se impostato su FlatStyle.Standard, la luce blu appare improvvisamente e scompare. Chiudi, ma non proprio uguale. Le caselle combinate fanno la stessa cosa (almeno quando la loro proprietà DropDownStyle è impostata su ComboBoxStyle.DropDownList).

Si consiglia di impostare tutti i controlli che hanno tale proprietà su FlatStyle.System a meno che non si richieda assolutamente un comportamento non supportato da questo FlatStyle.

Ci sono un paio di altre eccezioni. Alcuni controlli WinForms non esistono in Win32, quindi non sono supportati dai controlli nativi. Lo DataGridView è un buon esempio di tale controllo.

Infine, i controlli MenuStrip e ContextMenuStrip sono scritti interamente in codice C# e sono disegnati manualmente da WinForms. Non sono supportati in alcun modo dai controlli nativi di Win32. Ecco perché sembrano così orribilmente brutti su Windows Vista e successivi, perché sono bloccati per sempre usando lo stile di Office XP. Sembrava interessante su Windows XP, ma si diffonde come un pollice sulle versioni successive. Cambiare lo stile di rendering da Professional a System non aiuta molto.

Invece, è necessario aggiungere le versioni originali di questi controlli, MainMenu e ContextMenu, alla casella degli strumenti. Non sono inclusi di default nelle versioni recenti di Visual Studio, ma sono assolutamente disponibili per l'uso e non vanno da nessuna parte. Ancora una volta, consiglio vivamente di utilizzarli, dato che sono supportati al 100% dai menu nativi di Win32 e quindi sembrano come dovrebbero indipendentemente dalla versione di Windows dell'utente.

+0

+1 interessante. Hai un riferimento per questo? –

+0

@Jay Non proprio, no. La documentazione fornisce alcuni suggerimenti, così come la fonte di riferimento. Ma il miglior riferimento è la mia esperienza. –

Problemi correlati