Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Comme vous l’avez remarqué lors de l’interaction avec le concepteur Windows Forms, il existe de nombreuses fonctionnalités au moment du design offertes par les contrôles Windows Forms. Certaines des fonctionnalités offertes par le Concepteur Visual Studio incluent des lignes d’alignement, des éléments d’action et la grille de propriétés. Toutes ces fonctionnalités vous offrent un moyen plus simple d’interagir et de personnaliser un contrôle au moment du design. Cet article est une vue d’ensemble du type de support que vous pouvez ajouter à vos contrôles personnalisés pour améliorer l’expérience au moment du design pour les consommateurs de vos contrôles.
Ce qui est différent de .NET Framework
De nombreux éléments de conception de base des contrôles personnalisés sont restés identiques à partir de .NET Framework. Toutefois, si vous utilisez des fonctionnalités de personnalisation de concepteur plus avancées, telles que des listes d’actions, des convertisseurs de types, des dialogues personnalisés, vous avez des scénarios uniques à gérer.
Visual Studio est une application .NET Framework et, par conséquent, le Concepteur visuel que vous voyez pour Windows Forms est également basé sur .NET Framework. Avec un projet .NET Framework, l’environnement Visual Studio et l’application Windows Forms en cours d’exécution dans le même processus, devenv.exe. Cela pose un problème lorsque vous utilisez une application .NET Windows Forms (et non .NET Framework). .NET et .NET Framework ne peuvent pas fonctionner dans le même processus. Par conséquent, Windows Forms .NET utilise un autre concepteur, le concepteur « out-of-process ».
Le concepteur hors processus est un processus appelé DesignToolsServer.exe et est exécuté en même temps que le processus de devenv.exe de Visual Studio. Le processus DesignToolsServer.exe s’exécute dans la même version et la même plateforme, comme .NET 9 et x64, de .NET que votre application cible. Lorsque votre contrôle personnalisé doit afficher l’interface utilisateur dans Visual Studio, votre contrôle personnalisé doit implémenter une architecture client-serveur pour faciliter la communication vers et depuis devenv.exe. Pour plus d’informations, consultez Les changements du concepteur depuis .NET Framework.
Fenêtre De propriété
La fenêtre Propriétés de Visual Studio affiche les propriétés et les événements du contrôle ou du formulaire sélectionné. Il s’agit généralement du premier point de personnalisation que vous effectuez sur un contrôle ou un composant personnalisé.
L’image suivante montre un contrôle Button
sélectionné dans le Concepteur visuel et la grille des propriétés montrant les propriétés du bouton :
Vous pouvez contrôler certains aspects de la façon dont les informations relatives à votre contrôle personnalisé s’affichent dans la grille des propriétés. Les attributs sont appliqués à la classe de contrôle personnalisée ou aux propriétés de classe.
Attributs pour les classes
Le tableau suivant montre les attributs que vous pouvez appliquer pour spécifier le comportement de vos composants et contrôles personnalisés au moment de la conception.
Caractéristique | Descriptif |
---|---|
DefaultEventAttribute | Spécifie l’événement par défaut d’un composant. |
DefaultPropertyAttribute | Spécifie la propriété par défaut d’un composant. |
DesignerAttribute | Spécifie la classe utilisée pour implémenter des services au moment de la conception pour un composant. |
DesignerCategoryAttribute | Spécifie que le concepteur pour une classe appartient à une certaine catégorie. |
ToolboxItemAttribute | Représente un attribut d’un élément de boîte à outils. |
ToolboxItemFilterAttribute | Spécifie la chaîne de filtrage et le type de filtre à utiliser pour un élément de boîte à outils. |
Attributs pour les propriétés
Le tableau suivant décrit les attributs que vous pouvez appliquer aux propriétés ou aux autres membres de vos composants et contrôles personnalisés.
Caractéristique | Descriptif |
---|---|
AmbientValueAttribute | Spécifie la valeur à passer à une propriété pour que celle-ci obtienne sa valeur à partir d’une autre source. On appelle cela l’ambiance. |
BrowsableAttribute | Spécifie si une propriété ou un événement doit être affiché dans une fenêtre Propriétés. |
CategoryAttribute | Spécifie le nom de la catégorie dans laquelle regrouper la propriété ou l’événement lorsqu’elle est affichée dans un PropertyGrid contrôle défini sur Categorized mode. |
DefaultValueAttribute | Spécifie la valeur par défaut d'une propriété. |
DescriptionAttribute | Spécifie une description pour une propriété ou un événement. |
DisplayNameAttribute | Spécifie le nom complet d’une propriété, d’un événement ou d’une méthode publique qui ne retourne pas de valeur et ne prend aucun argument. |
EditorAttribute | Spécifie l’éditeur à utiliser pour modifier une propriété. |
EditorBrowsableAttribute | Spécifie qu'une propriété ou une méthode peut s'afficher dans un éditeur. |
HelpKeywordAttribute | Spécifie le mot clé du contexte pour une classe ou un membre. |
LocalizableAttribute | Spécifie si une propriété doit être localisée. |
PasswordPropertyTextAttribute | Indique que la représentation textuelle d’un objet est masquée par des caractères tels que des astérisques. |
ReadOnlyAttribute | Spécifie si la propriété de cet attribut est liée est en lecture seule ou lecture/écriture au moment de la conception. |
RefreshPropertiesAttribute | Indique que la grille de propriétés doit s’actualiser lorsque la valeur de propriété associée change. |
TypeConverterAttribute | Spécifie le type à utiliser comme convertisseur de l'objet auquel cet attribut est lié. |
Concepteurs de contrôles personnalisés
L’expérience au moment du design pour les contrôles personnalisés peut être améliorée en créant un concepteur personnalisé associé. Par défaut, votre contrôle personnalisé s’affiche sur l’aire de conception de l’hôte, et il ressemble à celui qu’il effectue pendant l’exécution. Avec un concepteur personnalisé, vous pouvez améliorer l’affichage au moment du design du contrôle, ajouter des éléments d’action, des lignes d’alignement et d’autres éléments, ce qui peut aider l’utilisateur à déterminer comment disposer et configurer le contrôle. Par exemple, au moment du design, le ToolStrip concepteur ajoute des contrôles supplémentaires pour que l’utilisateur ajoute, supprime et configure les éléments individuels, comme illustré dans l’image suivante :
Vous pouvez créer vos propres concepteurs personnalisés en effectuant les étapes suivantes :
- Ajout de référence au package NuGet Microsoft.WinForms.Designer.SDK.
- Créer un type hérite de la
Microsoft.DotNet.DesignTools.Designers.ControlDesigner
classe. - Dans votre classe de contrôle utilisateur, marquez la classe avec l’attribut System.ComponentModel.DesignerAttribute de classe, en passant le type que vous avez créé à l’étape précédente.
Pour plus d’informations, consultez la section What’s different from .NET Framework .
Éléments d’action
Les actions du concepteur sont des menus contextuels qui permettent à l’utilisateur d’effectuer rapidement des tâches courantes. Par exemple, si vous ajoutez une TabControl à un formulaire, vous allez ajouter et supprimer des onglets dans et à partir du contrôle. Les onglets sont gérés dans la fenêtre Propriétés , via la TabPages propriété, qui affiche un éditeur de collection d’onglets. Au lieu de forcer l’utilisateur à toujours parcourir la liste Propriétés en recherchant la propriété TabPages
, le TabControl
fournit un bouton de balise intelligente qui n’est visible que lorsque le contrôle est sélectionné, comme illustré dans les images suivantes :
Lorsque la balise active est sélectionnée, la liste d’actions s’affiche :
En ajoutant les actions Ajouter un onglet et supprimer des onglets , le concepteur du contrôle le fait de sorte que vous puissiez rapidement ajouter ou supprimer un onglet.
Création d’une liste d’éléments d’action
Les listes d’éléments d’action sont fournies par le ControlDesigner
type que vous créez. Les étapes suivantes sont un guide de base pour créer votre propre liste d’actions :
- Ajout de référence au package NuGet Microsoft.WinForms.Designer.SDK.
- Créez une classe de liste d’actions qui hérite de
Microsoft.DotNet.DesignTools.Designers.Actions.DesignerActionList
. - Ajoutez les propriétés à la liste d’actions à laquelle vous souhaitez que l’utilisateur accède. Par exemple, l’ajout d’une
bool
propriété ouBoolean
(en Visual Basic) à la classe crée un CheckBox contrôle dans la liste d’actions. - Suivez les étapes de la section Concepteurs de contrôles personnalisés pour créer un concepteur.
- Dans la classe du concepteur, remplacez la
ActionLists
propriété, qui retourne unMicrosoft.DotNet.DesignTools.Designers.Actions.DesignerActionListCollection
type. - Ajoutez votre liste d’actions à une
DesignerActionListCollection
instance et retournez-la.
Pour obtenir un exemple de liste d’actions, consultez le référentiel GitHub documents d’extensibilité du Concepteur Windows Forms et exemples gitHub, en particulier le TileRepeater.Designer.Server/ControlDesigner
dossier.
Éditeurs de type de boîte de dialogue modal
Dans la fenêtre Propriétés, la plupart des propriétés sont facilement modifiées dans la grille, par exemple lorsque le type de stockage de la propriété est une énumération, une valeur booléenne ou un nombre.
Parfois, une propriété est plus complexe et nécessite une boîte de dialogue personnalisée que l’utilisateur peut utiliser pour modifier la propriété. Par exemple, la Font propriété est un type System.Drawing.Font , qui contient de nombreuses propriétés qui modifient l’apparence de la police. Cette propriété n’est pas facilement présentable dans la fenêtre Propriétés . Cette propriété utilise donc une boîte de dialogue personnalisée pour modifier la police :
Si vos propriétés de contrôle personnalisées utilisent les éditeurs de type intégrés fournis par Windows Forms, vous pouvez utiliser la fonction EditorAttribute pour marquer vos propriétés avec l’éditeur .NET Framework correspondant que Visual Studio doit utiliser. En utilisant les éditeurs intégrés, vous évitez d’avoir à répliquer la communication client-serveur d’objet proxy fournie par le concepteur hors processus.
Lors du référencement d’un éditeur de type intégré, utilisez le type .NET Framework, et non le type .NET :
[Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public string? Filename { get; set; }
<Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")>
Public Property Filename As String
.NET Desktop feedback