次の方法で共有


Visual Studio ユーザー プロンプトを作成する

ユーザー プロンプトは、選択、メッセージの確認、または 1 行の文字列入力の入力をユーザーに求めるシンプルな UI メカニズムです。 ユーザーへのプロンプトにより、メッセージ、タイトルバー、閉じるボタン、およびオプションのアイコンを含むダイアログボックスが作成されます。 ダイアログで一連のオプションから選択するように求めるメッセージが表示されると、選択肢に対して 1 ~ 3 つのボタンも含まれます。

ユーザーにプロンプトを表示するために使用される正確な UI は、ユーザーのフィードバックやその他の要因に基づいて、将来のバージョンで変更される可能性があります。

ユーザー プロンプトには、オプション プロンプトと入力プロンプトという 2 つのバリエーションがあります。

オプション プロンプトの一般的な例として、OK またはキャンセル プロンプトを使用して確認を要求したり、少数のオプションセット (3 つ以下) を選択するようユーザーに求めたりします。

ユーザーに提示される選択肢は、 TResult 型パラメーターで定義されている型の戻り値にマップされます。

プロジェクト名などの単一行の文字列入力をユーザーに提供するように求める場合は、入力プロンプトを使用します。

ユーザーには常に、選択を行わずにプロンプトを閉じるオプションがあります。

ユーザー プロンプトの一部

ユーザー プロンプトの部分を示すスクリーンショット。

  1. メッセージ
  2. 選択肢ボタン
  3. [閉じる] ボタン

始めましょう

開始するには、「 最初の Visual Studio 拡張機能を作成する」の手順に従います。

ユーザー プロンプトを操作する

この記事では、ユーザー プロンプトを操作するための次のシナリオについて説明します。

ユーザー プロンプトを表示する

新しい機能拡張モデルを使用してユーザー プロンプトを作成することは、ShowPromptAsync ヘルパーから メソッドを呼び出してオプションを渡すのと同じくらい簡単です。

ShellExtensibility.ShowPromptAsync()

ShowPromptAsync メソッドは、次の 3 つのパラメーターを受け取ります。

パラメーター タイプ 必須 説明
message string イエス プロンプトのメッセージのテキスト。
options PromptOptions<TResult> イエス ユーザーの選択肢を定義し、それらを戻り値にマップします。
cancellationToken CancellationToken イエス 非同期操作における CancellationToken。 トリガーされると、プロンプトは強制的に閉じられます。

Command内の次のコードは、単純なメッセージと [OK] ボタンを含むユーザー プロンプトを示しています。

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    await this.Extensibility.Shell().ShowPromptAsync("This is a user prompt.", PromptOptions.OK, cancellationToken))
}

組み込みオプションを使用する

SDK では、いくつかの定義済み PromptOptions セットを使用できます。

[OK]

選択 既定値 戻り値
[OK] イエス true
閉める false

OKキャンセル

選択 既定値 戻り値
[OK] イエス true
キャンセル いいえ false
閉める false

再試行/キャンセル

選択 既定値 戻り値
再試行 イエス true
キャンセル いいえ false
閉める false

アイコンを使用した確認

選択 既定値 戻り値
[OK] イエス true
閉める false
選択肢 アイコン
ErrorConfirm ImageMoniker.KnownValues.StatusError
WarningConfirm ImageMoniker.KnownValues.StatusWarning
AlertConfirm ImageMoniker.KnownValues.StatusAlert
InformationConfirm ImageMoniker.KnownValues.StatusInformation
HelpConfirm ImageMoniker.KnownValues.StatusConfirm

[OK] のユーザー プロンプトを示すスクリーンショット。

1 つの [OK] を選択してプロンプトを作成します。

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken ct)
{
    // Asking the user to confirm an operation.
    if (!await this.Extensibility.Shell().ShowPromptAsync("Continue with executing the command?", PromptOptions.OKCancel, ct))
    {
      return;
    }
    
    ...
}

ユーザーが [OK] を選択した場合、 ShowPromptAsync は待機時に true を返します。 ユーザーが [閉じる ] ボタンを選択すると、 falseが返されます。

組み込みオプションの既定の選択肢を変更して取り消す

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken ct)
{
  // Asking the user to confirm an operation.
  if (!await this.Extensibility.Shell().ShowPromptAsync("Continue with executing the command?", PromptOptions.OKCancel.WithCancelAsDefault(), ct))
  {
    return;
  }
  
  ...
}

カスタム オプションを使用してプロンプトを作成する

カスタム ユーザー プロンプトを示すスクリーンショット。

また、ユーザーに表示される選択肢と、それぞれにマップされた戻り値をカスタマイズすることもできます。

PromptOptionsで定義されているセットを使用する代わりに、PromptOptions<TResult>の新しいインスタンスを作成し、ShowPromptAsyncに渡します。

まず、戻り値を定義する値型を作成します。

public enum TokenThemeResult
{
  None,
  Solarized,
  OneDark,
  GruvBox,
}

次に、PromptOptions<TResult> インスタンスを作成し、それを渡します。 ShowPromptAsync 必要なmessageおよびcancellationTokenの引数とともに。

TitleプロパティとIconプロパティを設定して、タイトルとアイコンをカスタマイズします。

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken ct)
{
  // Custom prompt
  Systems selectedSystem = await shell.ShowPromptAsync(
      "Select the system to configure:",
      new PromptOptions<Systems>
      {
          Choices =
          {
              { "Core", Systems.CoreSystem },
              { "Auxiliary", Systems.AuxiliarySystem },
              { "Monitoring", Systems.MonitoringSystem },
          },
          DismissedReturns = Systems.CoreSystem,
          DefaultChoiceIndex = 2
          Title = "Configuration Assistant",
          Icon = ImageMoniker.KnownValues.Settings,
      },
      cancellationToken);

  Debug.WriteLine($"Selected system: {selectedSystem}");
}

Choices コレクションは、ユーザーの選択をカスタム Systems列挙型の値にマップします。 ユーザーが [閉じる ] ボタンを選択 DismissedReturns 、返される値を設定します。 DefaultChoiceIndex は、既定の選択肢を定義する Choices コレクションへの 0 から始まるインデックスです。

入力プロンプトを作成する

単純な入力プロンプトを示すスクリーンショット。

string? projectName = await shell.ShowPromptAsync(
    "Enter the name of the project to configure?",
    InputPromptOptions.Default with { Title = "Configuration Assistant" },
    cancellationToken);

選択プロンプトなどのカスタム アイコンに加えて、入力プロンプトでは既定値もサポートされます。 DefaultText インスタンスのInputPromptOptions プロパティを設定します。

ユーザーが [キャンセル ] ボタン、 閉じる ボタン、または Esc キーを選択した場合、戻り値は null。 ユーザーが入力を空白のままにし、[ OK] ボタンまたは Enter キーを選択した場合、戻り値は空の文字列です。

それ以外の場合、戻り値は、ユーザーが入力を確認したときの入力の内容です。

次のサンプルは、ユーザー プロンプトを操作する方法を示しています。