2008-09-15 12 views
0

Comment définir vos UserControls comme étant dans un espace de nom sous l'espace de noms du projet, c.-à-d. [RootNameSpace]. [SubSectionOfProgram] .Controls?Définition de l'espace de noms d'un contrôle utilisateur WinForms dans VB.NET

Modifier en raison de la réponse de camainc: J'ai également une contrainte que je dois avoir tout le code dans un seul projet.

Editer pour finaliser la question: Comme je me doutais qu'il n'est pas possible de faire ce dont j'avais besoin, la réponse de camainc est la solution la plus proche.

Répondre

1

Je ne sais pas si c'est ce que vous demandez, mais voici comment nous le faisons.

Nous nommons tous nos projets de manière cohérente, les contrôles utilisateur ne sont pas différents. Nous avons également un espace de noms utilisant la fenêtre des paramètres du projet, bien que vous puissiez le faire en combinant la fenêtre du projet et le code.

Chaque solution obtient un espace de noms comme ceci:

[CompanyName].[SolutionName].[ProjectName] 

Ainsi, nos contrôles utilisateur sont normalement dans un projet intitulé « Contrôle », ce qui aurait un espace de noms:

OurCompany.ThisSolution.Controls 

Si nous avoir des contrôles qui pourraient s'étendre sur plusieurs solutions différentes, nous avons juste espace de nommage comme si:

OurCompany.Common.Controls 

Ensuite, dans notre code, nous allons importer la bibliothèque, ou ajouter le projet à la solution.

Imports OurCompany 
Imports OurCompany.Common 
Imports OurCompany.Common.Controls 

Nous nommons également les dossiers dans lesquels les projets vivent la même chose que l'espace de noms, jusqu'à, mais sans le nom de l'entreprise (toutes les solutions sont supposées être dans l'espace de l'entreprise):

\ Projects
\ Projects \ MySolution
\ Projects \ MySolution \ Controls

- ou -

\ Projects \
\ Projects \ Common
\ projects \ Common \ Assemblées
\ Projects \ Common Files \ Controls

etc.

espoir qui aide ...

+0

Bonne solution à la question d'origine alors je vous ai marqué. Cependant, cela ne résout pas mon problème actuel, j'ai donc ajouté quelques précisions à la question. –

0

Voulez-vous dire que vous voulez être en mesure d'accéder aux commandes de l'utilisateur lors de l'exécution (en code) via

[ProjectNamespace].[YourSpecialNamespace].Controls

plutôt que la valeur par défaut de

[ProjectNamespace].Controls

? Parce que je ne crois pas que ce soit possible. Si je ne me trompe pas, la collection Controls de votre projet/application est intégrée par le framework - vous ne pouvez pas le changer. Vous pouvez, comme camainc noté, utilisez la fenêtre des paramètres du projet (ou code) pour placer eux-mêmes des contrôles dans un espace de noms spécifique ainsi:

Namespace [YourSpecialNamespace]

Public Class Form1

[...]

End Class

End Namespace

Bien sûr, d'y penser un peu plus, je suppose que vous pourriez concevoir et construire votre propre collection Controls dans votre espace - peut-être une enveloppe pour le intégré un ...

1

Si vous n » Pour que les contrôles soient dans un projet distinct, vous pouvez simplement ajouter le mot-clé Namespace en haut du fichier de code. Par exemple, je l'ai fait quelque chose comme ça dans plusieurs projets:

Imports System.ComponentModel 

Namespace Controls 
    Friend Class FloatingSearchForm 

     'Your code goes here... 

    End Class 
End Namespace 

Vous ne pourrez spécifier que les contrôles sont dans un espace de noms racine différent de celui spécifié pour le projet, ils font partie de. VB ajoutera simplement tout ce que vous spécifiez pour l'espace de noms à l'espace de noms spécifié dans la fenêtre des propriétés du projet. Ainsi, si votre projet entier est "AcmeCorporation.WidgetProgram" et que vous ajoutez "Contrôles d'espace de nom" en haut d'un fichier de contrôle, le contrôle sera dans l'espace de noms "AcmeCorporation.WidgetProgram.Controls". Il n'est pas possible de faire apparaître le contrôle dans l'espace de noms "AcmeCorporation.SomeOtherProgram.Controls".

Notez également que si vous utilisez le concepteur pour modifier vos contrôles, vous devez ajouter le mot clé Namespace à la classe partielle cachée créée par le concepteur. Cliquez sur le bouton "Afficher tous les fichiers" dans l'explorateur de solution, puis cliquez sur la flèche d'expansion à côté de votre contrôle. Vous devriez voir un fichier "* .Designer.vb" répertorié. Ajoutez également l'espace de noms à ce fichier. Le concepteur va respecter cette modification, et votre projet devrait maintenant compiler sans erreur. Évidemment, l'espace de noms spécifié dans la classe partielle du concepteur doit être le même que celui spécifié dans votre fichier de classe! Pour l'exemple ci-dessus:

Namespace Controls 
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ 
    Partial Class FloatingSearchForm 

     'Designer generated code 

    End Class 
End Namespace