2010-09-29 10 views
13

Ho notato le proprietà Tag con i controlli. Va bene usarlo per fare riferimento ai miei oggetti personalizzati, o dovrei starne alla larga perché richiederebbe boxing e unboxing che è stato menzionato come non sicuro e non è raccomandato.A cosa serve la proprietà Tag in .net

TreeNode tn = new TreeNode(); 
CustClass o = new CustClass() 
o.number = 123; 
tn.Tag = o; 

class CustClass 
{ 
    public int number {get; set;} 
} 
+1

Un buon punto di partenza: [riferimento MSDN su Tag] (http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx) – NullUserException

+0

perché l'hai fatto tagga che fora programming langauge? totalmente estraneo. – TomTom

+4

@ Tomom: perché il codice che ha fornito è scritto in C#? Inoltre, che diavolo è 'net-winforms'? Stai tornando ... –

risposta

30

Lo scopo della proprietà Tag è per voi di usarlo per qualsiasi scopo che si desidera. Puoi tranquillamente archiviare qualsiasi cosa ci sia dentro.

È consuetudine dichiarare una classe specificamente progettata per essere archiviata nella proprietà Tag (come è stato fatto con lo CustClass). Ma se hai bisogno di un solo valore, allora non c'è niente di sbagliato nell'archiviazione diretta di uno int.

Dove hai letto che il boxing/unboxing è "non sicuro"? Non è assolutamente vero. (Alcune persone sostengono che sia inefficiente, ma anche questo non è vero). Inoltre, il tuo codice non contiene nemmeno un esempio di boxe. CustClass è un tipo di riferimento. Solo i tipi di valore sono in scatola se assegnati a object.

+4

Unboxing è inefficiente se utilizzato in grandi quantità, ma per un int in un controllo è improbabile che venga notato. –

2

Non penso che questo sarebbe un problema di boxe o unboxing per usarlo nel modo desiderato. Per quanto ne so, la proprietà Tag è solo per lo scopo del programmatore, quindi puoi usarla nel modo in cui ne hai bisogno.

Vedere la proprietà Control.Tag su MSDN per ulteriori riferimenti su come utilizzare questa proprietà.

Ad esempio, l'ho usato per inserire istruzioni per l'utente nelle applicazioni Windows Form. Quando è stato attivato l'evento di controllo GotFocus, alle proprietà Label.Text è stato assegnato il valore della proprietà Tag di controllo che conteneva la stringa di istruzioni.

0

Dal link citati anche da altri qui:

a https://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag.aspx si legge:

Qualsiasi tipo derivato dalla classe Object può essere assegnato a questa proprietà . Se la proprietà Tag è impostata tramite il designer di Windows Form , è possibile assegnare solo il testo.

Un uso comune per la proprietà Tag è quello di memorizzare i dati che sono strettamente associati a associato al controllo. Ad esempio, se si dispone di un controllo che visualizza informazioni su un cliente, è possibile memorizzare un DataSet che contenga la cronologia ordini del cliente nella proprietà Tag di tale controllo in modo che i dati siano accessibili rapidamente.

e ad https://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx si legge:

... viene creato un nodo radice dell'albero di assegnare nodi dell'albero bambino a. Un nodo dell'albero figlio per ogni oggetto Cliente in ArrayList viene aggiunto a il nodo dell'albero radice e un nodo dell'albero figlio per ciascun oggetto Ordine assegnato all'oggetto Cliente. L'oggetto Cliente è assegnato a la proprietà Tag e i nodi dell'albero che rappresentano gli oggetti Cliente sono visualizzati con testo Arancione.Questo esempio richiede che sia definito un oggetto Cliente e ordine , un controllo TreeView su un modulo e un ArrayList denominato customerArray che contiene oggetti Cliente.