2013-03-18 2 views
0

Je rtrying de traduire ce qui suit de l'exemple suivant SplitContainer Splitter Gets Focus Rectangle?Traduire un exemple de code de C# en C++

private: Control getFocused(Control::ControlCollection controls) 
{ 
    //foreach (Control c in controls) 
    //{ 
    // if (c.Focused) 
    // { 
    //  // Return the focused control 
    //  return c; 
    // } 
    // else if (c.ContainsFocus) 
    // { 
    //  // If the focus is contained inside a control's children 
    //  // return the child 
    //  return getFocused(c.Controls); 
    // } 
    //} 
    do 
    { 
      if (c.Focused) 
      { 
       // Return the focused control 
       return c; 
      } 
      else if (c.ContainsFocus) 
      { 
       // If the focus is contained inside a control's children 
       // return the child 
       return getFocused(c.Controls); 
      } 
    } 
    while(Control c in controls); 
    // No control on the form has focus 
    return null; 
} 

je cherche le droit synthanx pour la boucle Do While

while(Control c in controls); // error 

et puisque la fonction 'private: Control getFocused(Control::ControlCollection controls)' est du type Contrôle, j'ai besoin de spécifier une valeur de retour, à la fois 'return null;' et 'return nullptr;' échouent!

EDIT:

for(int index = 0; index <= controls.Count; index++) 
     { 
      if(controls[index]->Focused) 
      { 
       return controls[index]; 
      } 
      else if (controls[index]->ContainsFocus) 
      { 
       return getFocused(controls[index]->Controls); 
      } 
     } 

return controls[index]; ->pas de conversion définie par l'utilisateur approprié de "System :: :: de Windows Forms :: contrôle ^" à "System :: :: de Windows Forms :: Control" existe.

return getFocused(controls[index]->Controls); ->fonction "GetFocused" ne peut pas être appelé avec les types d'arguments de la liste des arguments donnés sont: (System :: de Windows :: Forms :: Contrôle :: ControlCollection ^)

return null; ->identifier "null" est définie

ou

return nullptr; ->pas de conversion défini par l'utilisateur adapté de "decltype (nullptr)" à « Sy stem :: Windows :: Forms :: Control "existe

+0

avez-vous déjà utilisé google pour rechercher un code ou une syntaxe? Je viens de googled faire --- alors qu'en C++ et trouvé MSDN référence http://msdn.microsoft.com/en-us/library/b0kk5few(v=vs.80).aspx – TalentTuner

+0

ouais, je l'ai fait ... mais. .. c'est surtout le tutoriel par défaut avec les opérateurs standart – NaturalDemon

+0

Vous n'avez pas la syntaxe 'foreach (.. in ..)' en C++. Vous devez utiliser une boucle 'for' normale en utilisant des index pour accéder aux éléments. –

Répondre

1

Mon C++/CLI est un peu rouillé. Mais permettez-moi de donner une réponse:

private: Control^getFocused(Control::ControlCollection ^controls) 
{ 
    for each (Control ^c in controls) 
    { 
     if (c->Focused) 
     { 
      return c; 
     } 
     else if (c->ContainsFocus) 
     { 
      return getFocused(c->Controls); 
     } 
    } 

    return nullptr; 
} 
+0

'Control '^' getFocused (Control :: ControlCollection^contrôles)' cela fait l'astuce en ajoutant le '^' devant la méthode ... faire un pointeur de fonction? – NaturalDemon

+0

Vous n'êtes pas en train de créer un pointeur de fonction, vous passez et renvoyez l'objet CLR par son handle (ce qui est fait automatiquement en C#, mais doit être explicite en C++/CLI). –

0

MD.Unicorn est techniquement correct car il n'y a pas de syntaxe C++ pour" foreach ". Cependant, C++ inclut quelque chose de très similaire dans la STL (pensez au framework .net plutôt qu'à C# proper).

C++ STL for_each

for_each(foo.begin(), foo.end(), [=](Control control){ 
    //Stuff 
}); 
+0

Je sais que la boucle 'pour chaque' n'est pas synchax C++, c'est pourquoi j'ai posé la question. – NaturalDemon

+0

Euh ... soupir ... Ce que je disais c'est qu'en C++ ce n'est pas dans la langue, c'est DANS LES BIBLIOTHÈQUES STANDARD. Ce qui est si damné standard que c'est seulement techniquement pas une partie de la langue. – Aron

+0

C'est la syntaxe correcte pour STL: for_each. Ce qui ne répond pas à ta question persiste. Mais résout juste votre problème à la place. – Aron