2009-07-22 5 views
7

Ho creato un controllo che eredita direttamente da ErrorProvider. Pensavo che applicando l'attributo ToolboxBitmap sarebbe stato sufficiente avere il mio controllo per avere la stessa icona nella casella degli strumenti del controllo originale, ma non è così. È strano, come se aggiungo il controllo al modulo, apparirà esattamente come dovrebbe, ma non cambia l'icona della toolbox. Cosa mi manca qui? Ho già riavviato Visual Studio e mantiene questo comportamento.Avendo il mio userControl ha la sua icona nella casella degli strumenti

[ToolboxBitmap(typeof(ErrorProvider))] 
public class ErrorProviderEx : ErrorProvider { 
... 
} 
+0

Solo per FYI: questi tipi di controlli sono Web Custom Controls (WCC), non Web User Controls (WUC). I WUC sono file ASCX che sono utilizzati in tutto il progetto web, i WCC sono usati a macchina ... Quindi nel tuo caso dovresti scrivere WCC nella tua domanda - solo per non confondere gli altri. –

+1

Non so di cosa tu stia parlando. Questo è System.Windows.Forms.ErrorProvider. –

+0

Se si fornisce un percorso "hardcoded" alla bitmap (ToolboxBitmap ("c: \\ my.bmp") mostra ancora la bitmap predefinita? –

risposta

5

In Visual Studio 2008, l'icona specificata da ToolBoxBitmap non viene aggiunta alla casella degli strumenti per nessuno dei componenti nella soluzione corrente per motivi di prestazioni. Viene utilizzata l'icona standard "ingranaggio". Se si aggiunge manualmente l'assembly tramite la finestra degli strumenti ... Aggiungi elementi ..., verrà visualizzata l'icona personalizzata che rappresenta il comportamento che si sta verificando. Inoltre, quando si trascina ErrorProviderEx in un modulo, verrà utilizzata l'icona specificata, che di nuovo è il comportamento annotato in un commento.

Nota, nel tuo caso, stai utilizzando typeof(ErrorProvider) in modo da non avere i normali problemi di utilizzo di una bitmap personalizzata.

(Questo comportamento potrebbe anche essere vero per Visual Studio 2005. Visual Studio 2003 ci ha rovinato visualizzando l'icona.) (Personalmente non mi piace questo nuovo comportamento. per recuperare l'icona di tutti i controlli e componenti nella soluzione. Mi chiedo se c'è una modifica del Registro di sistema per mostrare le icone.)

+0

Questo è ancora il comportamento attuale a partire da VS 2010. Nessun hack di registro che io sappia essere emerso –

+0

Ancora lo stesso in VS 2013. – peterincumbria

2

Si trova nello stesso progetto? O una DLL a cui fai riferimento?

Si ottengono solo icone appropriate quando si fa riferimento a una dll fissa. Prova a creare una DLL di controllo e a farla riferimento.

+0

Ah. È in un altro progetto, nella stessa soluzione, quindi non c'è un work-around –

1

Quindi c'è un work-around. Supponendo che il tuo UserControl sia nel progetto "MyControl", aggiungi un riferimento a se stesso. Ovvero: progetto MyControl di Referrence nel progetto MyControl, come faresti in un altro progetto. Quindi l'icona verrà visualizzata anche nella casella degli strumenti di quel progetto MyControl.

0

Il modo più semplice per garantire che venga visualizzata l'icona di una barra degli strumenti consiste nel creare un file bmp 16x16, posizionarlo nella cartella del progetto del controllo e impostarlo come risorsa incorporata.

Seguiamo un esempio relativamente semplice: Supponiamo di avere un componente chiamato MyCompany.Components.MyControl. Creare un bitmap 16x16 e salvarlo nella directory principale della cartella di progetto MyCompany.Components.MyControl come MyControl.bmp. Quindi fare clic con il pulsante destro del mouse sul file MyControl.bmp e selezionare Proprietà> Crea azione> Risorsa incorporata. A quel punto, hai ancora un passaggio: aggiungi l'attributo ToolboxBitmap sopra la definizione della classe (se usi le classi parziali, posiziono l'attributo nel file .cs principale del controllo - non nel file Designer.cs). Per fare questo, utilizzare la seguente sintassi:

[ToolboxBitmap(typeof(MyControl), "MyControl.bmp")] 

essere assolutamente sicuri che:

  • Lo spazio dei nomi per la classe del progetto MyControl corrisponde la struttura di cartelle per cui appare il progetto nella soluzione.
  • Potrebbe sembrare ovvio, ma assicurati di aver citato il nome corretto per il tuo file bmp.

La bitmap deve apparire ogni volta che il controllo viene aggiunto a una toolbox, sia che venga aggiunto manualmente o aggiunto a livello di codice.

Problemi correlati