2012-06-22 14 views
5

Sto tentando di utilizzare un'icona che ho aggiunto come risorsa come l'immagine su un pulsante. So che è possibile perché posso farlo in altri progetti attraverso il designer. Tuttavia, sto cercando di farlo con il codice. Ho aggiunto l'icona come risorsa al mio progetto seguendo i passaggi nella risposta accettata a this question. La risorsa è denominata CancelButtonIcon.Come faccio a trasmettere un'icona da un file di risorse a un'immagine da usare su un pulsante?

Ora, io sto cercando di aggiungere che icona come l'immagine su un pulsante standard con questo codice:

this.CancelButton.Image = (System.Drawing.Image)Properties.Resources.CancelButtonIcon; 

Tuttavia, ricevo un messaggio di errore:

Cannot convert type 'System.Drawing.Icon' to 'System.Drawing.Image' 

Nel codice che Visual Studio genera automaticamente quando utilizzo il designer, appare come questo:

((System.Drawing.Image)(resources.GetObject("SaveButton.Image"))); 

che risulta dall'aggiunta manuale di una risorsa tramite la finestra Proprietà. Come posso convertire questa risorsa icona in un'immagine in modo che possa essere utilizzata sul pulsante? Aggiungerlo tramite il designer non è un'opzione (questo pulsante è creato a livello di codice e quindi non è presente nel designer).

risposta

8

È possibile utilizzare il metodo Icon.ToBitmap per questo scopo. Si noti che uno Bitmap è un Image.

CancelButton.Image = Properties.Resources.CancelButtonIcon.ToBitmap(); 
+0

Perfetto e istantaneo. Trascorso il tempo limite, accetterò questo. –

+0

In realtà implementare questo mi fa notare qualcosa, tuttavia. Quando aggiungo le icone ai pulsanti nella finestra di progettazione, vengono ridimensionate automaticamente in modo che si adattino al pulsante. Questo non si verifica quando utilizzo il tuo codice, quindi le icone sono * molto * più grandi dei pulsanti. –

+0

Se si desidera ridimensionare, usare 'new Bitmap (Properties.Resources.CancelButtonIcon.ToBitmap(), CancelButton.Size)' – Ani

0

Non so perché, ma ogni volta che ho provato ad utilizzare l'approccio del risposta accettata, la chiamata .ToBitmap() mi stava dando indice di array fuori dai limiti eccezioni. Ho risolto questo facendo in questo modo invece:

System.Drawing.Icon.FromHandle(Properties.Resources.CancelButtonIcon.Handle).ToBitmap(); 
Problemi correlati