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

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.

Screenshot of a Dialog.

ShowDialogAsync

La méthode ShowDialogAsync comporte plusieurs surcharges que vous devez connaître :

Surcharges

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.

Screenshot showing a Dialog title.

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.

Screenshot of a Dialog button.

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.