2009-07-05 6 views

Répondre

4

Au lieu d'utiliser l'objet, utilisez le type qui a la méthode de mise au point.

void SetFocusControl(Control ctl) 
{ 
    ctl.Focus(); 
} 

Et je ne pense pas que vous ayez besoin de ref.

Je vous demanderais également si vous avez besoin d'une méthode séparée. Ne pourriez-vous pas simplement appeler la méthode Focus directement?

ctl.Focus(); 

Si vous ne connaissez pas le type ou si elle a une méthode de mise au point, vous pouvez le faire.

void SetFocusControl(object ctl) 
{ 
    Control control = ctl as Control 

    if (null == control) 
     return; 

    control.Focus(); 
} 
+0

Merci, Votre code fonctionne bien, et vous avez raison, je n'ai pas besoin d'utiliser ref. – Javier

0

Je ne peux pas expliquer pourquoi cela fonctionne dans VB, mais dans C#, vous avez déclaré que ctl est un objet de type. L'objet a quatre méthodes publiques ToString, GetHashcode, GetType et Equals. Pour faire cela en C# vous auriez besoin de la méthode pour accepter un type différent, comme Control, qui a une méthode Focus (ou une interface qui a cette méthode), ou après avoir reçu l'argument, vous devrez faire la conversion de type et vérifier obtenir l'objet dans un type qui a une méthode Focus.

+1

VB permet une liaison tardive facilement - vous pouvez modifier ce comportement en utilisant Option Strict. Voir ici- http://msdn.microsoft.com/en-us/library/zcd4xwzs(VS.80).aspx – RichardOD

Questions connexes