Créer des boîtes de dialogue Visual Studio
Les boîtes de dialogue permettent d’inviter un utilisateur à entrer des informations ou à autoriser les personnalisations du comportement des fonctionnalités. Par exemple, la boîte de dialogue Outils/Options comporte des pages individuelles qui permettent à l’utilisateur de contrôler le comportement des fonctionnalités telles que les thèmes, les éditeurs et les onglets de document.
Bien démarrer
Pour commencer, suivez la section créer le projet dans la section Prise en main.
Utiliser des dialogues
Ce guide est conçu pour couvrir les principaux scénarios utilisateur lors de l’utilisation de dialogues :
- Créer une boîte de dialogue
- Personnaliser le titre de la boîte de dialogue
- Personnaliser les boutons de boîte de dialogue
- Obtenir le résultat de la boîte de dialogue
Créer une boîte de dialogue
La création d’une fenêtre d’outil avec le nouveau modèle d’extensibilité est aussi simple que d’appeler la méthode ShowDialogAsync à partir des helpers ShellExtensibility et de transmettre votre contenu de boîte de dialogue.
ShowDialogAsync
La méthode ShowDialogAsync comporte plusieurs surcharges que vous devez connaître :
Surcharges
ShowDialogAsync(content,cancellationToken)
ShowDialogAsync(content,title,cancellationToken)
ShowDialogAsync(content,options,cancellationToken)
ShowDialogAsync(content,title,options,cancellationToken)
Paramètres
Nom | Type | Description |
---|---|---|
content | Microsoft.VisualStudio.RpcContracts.RemoteUI.IRemoteUserControl | Contenu de la boîte de dialogue. |
title | System.String | Titre de la boîte de dialogue. |
options | Microsoft.VisualStudio.RpcContracts.Notifications.DialogOption | Options d’affichage de la boîte de dialogue. |
cancellationToken | System.Threading.CancellationToken | AnnulationToken pour annuler la boîte de dialogue. |
public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
// Ownership of the RemoteUserControl is transferred to Visual Studio, so it shouldn't be disposed by the extension
#pragma warning disable CA2000 // Dispose objects before losing scope
var control = new MyDialogControl(null);
#pragma warning restore CA2000 // Dispose objects before losing scope
await this.Extensibility.Shell().ShowDialogAsync(control, cancellationToken);
}
Pour plus d’informations sur la création d’un RemoteUserControl, consultez l’interface utilisateur distante.
Personnaliser le titre de la boîte de dialogue
Lorsque votre extension affiche une boîte de dialogue, vous pouvez fournir une chaîne de titre personnalisée qui s’affiche dans la région légende de la boîte de dialogue.
public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
// Ownership of the RemoteUserControl is transferred to Visual Studio, so it shouldn't be disposed by the extension
#pragma warning disable CA2000 // Dispose objects before losing scope
var control = new MyDialogControl(null);
#pragma warning restore CA2000 // Dispose objects before losing scope
await this.Extensibility.Shell().ShowDialogAsync(control, "My Dialog Title", cancellationToken);
}
Personnaliser les boutons de boîte de dialogue
Lorsqu’un dialogue s’affiche dans l’IDE, certaines combinaisons de boutons de dialogue prédéfinis et d’actions par défaut peuvent être sélectionnées. Les combinaisons de boutons et d’actions prédéfinis sont disponibles dans Microsoft.VisualStudio.RpcContracts.Notifications.DialogOption
.
En outre, vous pouvez créer votre propre combinaison de boutons et d’actions par défaut à partir de :
Microsoft.VisualStudio.RpcContracts.Notifications.DialogButton
public enum DialogButton { // Hides all of the dialog buttons. None, // Shows a single close button. Close, // Shows a single OK button. OK, // Shows an OK and Cancel button. OKCancel }
Microsoft.VisualStudio.RpcContracts.Notifications.DialogResult
public enum DialogResult { // The dialog was closed via the System.Threading.CancellationToken or using an // action provided by the Microsoft.Visual Studio.RpcContracts.RemoteUI.IRemoteUserControl // content. None, // The user clicked the Close button. Close, // The user clicked the OK button. OK, // The user clicked the Cancel button, or clicked the nonclient close button, or // pressed the Esc key. Cancel }
Exemples
Ajout d’un bouton Annuler :
public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
// Ownership of the RemoteUserControl is transferred to Visual Studio, so it shouldn't be disposed by the extension
#pragma warning disable CA2000 // Dispose objects before losing scope
var control = new MyDialogControl(null);
#pragma warning restore CA2000 // Dispose objects before losing scope
await this.Extensibility.Shell().ShowDialogAsync(control, DialogOption.OKCancel, cancellationToken);
}
Sans bouton de boîte de dialogue :
public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
// Ownership of the RemoteUserControl is transferred to Visual Studio, so it shouldn't be disposed by the extension
#pragma warning disable CA2000 // Dispose objects before losing scope
var control = new MyDialogControl(null);
#pragma warning restore CA2000 // Dispose objects before losing scope
await this.Extensibility.Shell().ShowDialogAsync(control, new DialogOption(DialogButton.None, DialogResult.None), cancellationToken);
}
Obtenir le résultat de la boîte de dialogue
Si vous devez savoir si un utilisateur a fermé de manière affirmative une boîte de dialogue ou l’a ignoré, vous pouvez attendre l’appel à ShowDialogAsync
, et il retourne un Microsoft.VisualStudio.RpcContracts.Notifications.DialogResult
, qui représente l’action effectuée par l’utilisateur.
public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
// Ownership of the RemoteUserControl is transferred to Visual Studio, so it shouldn't be disposed by the extension
#pragma warning disable CA2000 // Dispose objects before losing scope
var control = new MyDialogControl(null);
#pragma warning restore CA2000 // Dispose objects before losing scope
DialogResult result = await this.Extensibility.Shell().ShowDialogAsync(control, "My Dialog Title", DialogOption.OKCancel, cancellationToken);
if (result == DialogResult.OK)
{
// User clicked the OK button
}
}
Étapes suivantes
Consultez l’exemple DialogSample pour obtenir un exemple complet de création d’une extension avec un dialogue.