2013-09-04 3 views
0

Je veux savoir s'il est possible d'ajouter un attribut à un Control dans C#.Ajouter des attributs à une classe de contrôle

J'ai une méthode, il reçoit un objet dans le paramètre:

public void CreateTooltip(Object controltoadd = null) 
    { 
     var myDiv = new HtmlGenericControl("div"); 
     myDiv.Attributes.Add("width", "100%"); 

     myDiv.Attributes.Add("onmouseover", "ShowHint('" + this.GetType() + "','test');"); 
     myDiv.Attributes.Add("onmouseout", "HideHint();"); 

     if (controltoadd == null) 
     { 
      List<Control> listcc = new List<Control>(); 

      for (int i = 0; i < this.Controls.Count; i++) 
      { 
       Control cc = this.Controls[i]; 
       string test = cc.GetType().ToString(); 
       listcc.Add(cc); 
      } 

      this.Controls.Clear(); 

      for (int i = 0; i < listcc.Count; i++) 
      { 
       Control cc = listcc[i]; 
       myDiv.Controls.Add(cc); 
      } 
     } 
     else 
     { 
      Control cc = (Control)controltoadd; 

      //Don't know what to do here... 
     } 

     this.Controls.Add(myDiv); 
    } 

Si l'objet est nul, je crée un HtmlGenericControl("div") puis ajouter la Attributes que je veux. Mais le problème est lorsque l'objet n'est pas nul, je le convertis en Control, et la propriété Attributes n'est pas disponible. J'utilise le contrôle car je ne sais jamais quel est le type de l'objet que j'ai reçu dans le paramètre.

+4

Vous devez jeter comme 'WebControl' ou' HtmlGenericControl' je crois. 'Control' ne contient pas la propriété' Attributes'. Vous pouvez tester l'objet que vous passez en utilisant 'is'. –

+0

Merci! Ça a marché comme sur des roulettes ! : D –

+0

Déplacé vers une réponse! :) –

Répondre

2

Vous devez jeter comme WebControl ou HtmlGenericControl je crois. Control ne contient pas la propriété Attributes. Vous pouvez tester l'objet que vous passez en utilisant is.

if (control is WebControl) 
{ 
    var webControl = (WebControl)control; 
} 

Ou si vous préférez utiliser as:

var webControl = control as WebControl; 

if (webcontrol != null) 
{ 
    // code 
} 
1

Donc si c'est réellement un WebControl (classe enfant de Control) alors vous pouvez le lancer et l'utiliser Attributes property. Control lui-même n'a pas de propriété Attributes que vous avez déjà remarqué:

WebControl wc = controltoadd as WebControl; 
if(wc != null) 
{ 
    // wc.Attributes.Add... 
} 

Si c'est un HtmlControl coulé à ce que:

else 
{ 
    HtmlControl hc = controltoadd as HtmlControl; 
    if(hc != null) 
    { 
     // hc.Attributes.Add... 
    } 
} 

Une autre option serait d'en faire une méthode générique qui accepte uniquement les contrôles cette implémentation IAttributeAccessor. Les deux, HtmlControl et WebControl mettre en œuvre cette interface pour obtenir/définir des attributs .:

public void CreateTooltip<T>(T controlToAdd)where T: IAttributeAccessor, Control 
{ 
    // .... 
    controlToAdd.SetAttribute("width", "100%"); 
} 
Questions connexes