2009-12-02 3 views
1
private void changeFont() 
    { 
     Control.ControlCollection controls = tabControl1.Controls; 
     foreach (Control control in controls) 
     { 
      TabPage t = (TabPage)control; 
      Control c = t.GetChildAtPoint(new Point(250, 250)); 
      System.Type type = typeof(c); //-->1st error 
      ((type)c).changeFont(fontModifier); //-->2nd error 
     } 
    } 

Erreur 1 n'a pas pu être trouvé « c » Le nom du type ou espace de noms (vous manque une directive à l'aide ou une référence d'assemblage?) Erreur 2 Le type ou le nom namespace « type » n'a pas pu être trouvé (manque-t-il une directive using ou une référence d'assembly?)C# nom ou d'un type non trouvé

Qu'est-ce qui ne va pas? Juste pour le contexte, j'essaie de passer par le tabcontrol et dans chaque onglet nous avons un contrôle utilisateur, c'est pourquoi le getChildAtPoint est cette position particulière. Dans tous les usercontrols, nous avons une fonction changefont qui va changer la taille de la police des contrôles spécifiques ....

Merci :)

Répondre

2

Pour obtenir le type réel d'un objet, au lieu de typeof, qui obtient le type pour un nom de type (comme dans typeof(string)), vous devez utiliser c.GetType(), qui obtient le type réel de l'objet pointé par c.

Comme pour (type)c, vous ne pouvez pas faire cela: la conversion de type fonctionne uniquement en utilisant un nom de type spécifique. Si vous avez besoin d'invoquer la méthode changeFont que dans les contrôles qui sont, ou dérivent de votre type de contrôle personnalisé, vous devez faire:

if(typeof(MyControlType).IsAssignableFrom(c.GetType()) { 
    ((MyControlType)c).changeFont(fontModifier); 
} 

Ou, encore plus facile:

var myControl = c as MyControlType; 
if(myControl != null) { 
    myControl.changeFont(fontModifier); 
} 
+0

le premier fonctionne, merci :) le second ... mais i ont: System.Type Type = c.GetType(); ((Type) c) .changeFont (fontModifier); était-ce cela que vous vouliez dire? car Visual Studio pense que Type (2ème ligne) fait référence à System.Type plutôt qu'à la variable. – ladidadida

+0

Par ailleurs, où la méthode 'changeFont' est-elle définie? – Konamiman

+0

dans mes contrôles définis par l'utilisateur – ladidadida

0

si tous les usercontrols avoir une fonction changeFont, je présume l'implémentation d'une classe/interface.

private void changeFont() 
{ 
    Control.ControlCollection controls = tabControl1.Controls; 
    foreach (Control control in controls) 
    { 
     TabPage t = (TabPage)control; 
     Control c = t.GetChildAtPoint(new Point(250, 250)); 
     if (c is <your class>) 
     { 
      (<yourclass>)c.changeFont(fontModifier); 
     } 
    } 
} 
+0

Merci pour cela :) – ladidadida