2009-10-06 8 views
16

J'ai un problème (évidemment la question :)Le nom du type {} myUserControl n'existe pas dans le type {} myNamespace.myNamespace

J'ai MyProject project-- ... d'où le reste du projet utilise un défaut de toutes les classes comme espace de noms "MyProject" ... pas de problème.

Dans mon projet, j'ai créé un contrôle utilisateur personnalisé qui comporte de nombreux autres contrôles (étiquette, zones de texte, etc.). Donc, cette classe est AUSSI dans l'espace de noms par défaut de "MyProject". Tout compile sans problème. Juste pour confirmer la visibilité de la portée, sur ce contrôle utilisateur, je me suis assuré que le code DESIGNER et le Code-Behind sont tous les deux dans le même espace de noms "MyProject" (ils sont), ET ils sont respectivement .

Maintenant, le problème. Je crée un formulaire simple (également dans l'espace de noms "MyProject" par défaut). De la boîte à outils, le "MyUserControl" existe donc je le fais glisser sur MyNewForm. Glisser/Déposer est bien. Enregistrer tout, compiler, échouer ... Le concepteur ajoute une référence "MyProject" supplémentaire, ce qui donne l'impression que le contrôle utilisateur est situé sur MyProject.MyProject.MyUserControl .. au lieu de MyProject.MyUserControl.

Dès que je supprime manuellement l'extra "MyProject.", Enregistrer et compiler, tout va bien. Cependant, si je réédite le formulaire, change quelque chose, M $ le change à la référence "MyProject.MyUserControl" d'origine.

Tout cela étant dit, voici les extraits de mon projet ...

namespace MyProject 
{ 
    partial class MyNewForm 
    { 
     ... 
     private void InitializeComponent() 
     { 
     // THIS is the line that has the extra "MyProject." reference 
     // when I manually remove it, all works perfectly 
     this.MyUserControl1 = new MyProject.MyUserControl(); 
     } 
    } 


    private MyUserControl MyUserControl1; 

} 

Ensuite, dans la définition MyUserControl ... Je

namespace MyProject 
{ 
    public partial class MyUserControl : UserControl 
    ... 
} 

et de la MyUserControl via le concepteur ...

namespace MyProject 
{ 
    public partial class MyUserControl : UserControl 
    ... 

} 

Merci pour l'aide ...

Répondre

11

Ce que le concepteur fait est ok.

-> Vous avez quelque part dans votre projet un espace de noms appelé MyProject.MyProject.

(Essayez de trouver dans « Class View »)

+2

CHARGES de remerciements. – Larry

+15

Également se produit, lorsque vous avez classe dans un espace de noms avec le même nom que son espace de noms. – greenskin

0

Depuis ce fut un résultat de recherche en haut quand j'ai eu cette erreur, je veux juste poster ma cause et la solution. J'ai eu deux projets dans une solution, partageant un fichier de classe «commun» qui a été ajouté en tant que lien.

  • J'ai ajouté un second fichier de classe 'helper' en tant que lien, j'ai utilisé son code dans le premier et j'ai obtenu l'erreur. Le problème était que je n'avais pas ajouté la deuxième classe 'helper' en tant que lien dans les deux projets. Donc l'autre projet avait une classe 'commune' mise à jour, mais aucune connaissance de la classe 'helper' qu'il utilisait maintenant.

    Note à moi: accorder plus d'attention à la colonne de projet de la liste d'erreur :)

  • 11

    PS. à toute personne qui a le même problème mais n'a pas trouvé de solution ...

    En supposant que vous avez créé une nouvelle application WindowsFormApplication;

    1. Créez un nouveau projet WindowsFormApplication en utilisant le même nom que son nom de solution.
    2. Le nom de formulaire pré-créé par défaut est appelé "Form1". Et changez son nom même que le nom du projet.
    3. Ajouter une nouvelle classe UserControl dans le projet.
    4. Construire/Reconstruire le projet et vérifier que le contrôle utilisateur se trouve dans la boîte à outils.
    5. Faites glisser la commande usercontrol sur le formulaire et démarrez le débogage.
    • Error: The type name 'userControlName' does not exist in the type 'projectName.FormName'

    j'avais la recherche sur le net pour une solution mais ne pouvait pas trouver une réponse ...

    Mais si vous changez le nom de toute autre forme différent du nom du projet, il » sera résolu.

    Si vous insistez sur le fait que le nom du formulaire et le nom du projet doivent être identiques en fonction des besoins de votre projet, une DLL personnalisée peut être créée et utiliser la commande usercontrol.

    ensuite à utiliser comme un contrôle, ajoutez le fichier DLL à « ToolBox » en utilisant « Choisir des éléments ... »

    Enfin, il va être prêt à l'emploi.

    PS2. luttant contre le même problème pendant des heures, c'est la solution que j'ai trouvée.

    +1

    J'ai rencontré un problème similaire. Pour moi, c'était une classe avec le même nom de l'espace de noms.M'a rendu fou mais grâce à cette réponse je l'ai trouvé. –

    1

    Le nom du contrôle utilisateur et la forme sont les mêmes. L'utilisation de noms différents résoudra le problème. Le nom d'espace de noms et le nom de classe doivent être différents.

    2

    Le code généré en ajoutant le WCF référence automatiquement l'espace de noms mais si le nom de classe est le même que le nom d'espace de noms, le code généré regarde la classe et rien ne compilera.

    0

    Juste rencontré ce où j'avais une MasterPage qui avait un explicite

    <%@ Import Namespace="MyNamespace" %> 
    

    dans le fichier .master

    0

    Cela se produit également lorsque vous utilisez des pages différentes mais avec le même nom. Dans mon cas, j'avais créé le jeu de données "Grants.xsd" et la page "Grants.aspx". D'une manière ou d'une autre, ils se sont retrouvés en conflit, provoquant cette erreur.

    Vous pouvez facilement résoudre ce problème en survolant le mot-clé coupable (nom de la classe) et, dans Visual Studio 2013, il vous dira exactement où se situe le conflit.

    Questions connexes