1

VSPackageでカスタムシングルビューエディタを正常に作成しました。私が対処しなければならなかった多くのことの1つは、編集されたファイルがVisualStudioの外部で変更されたときの状況に対応することでした。したがって、さらに多くのファイルが変更された場合は、1つのダイアログのみが表示されます。

ただし、これまでのVSPackageで実行できるのは、ファイルが変更されたときにカスタムダイアログを表示することだけです。きれいではありません。エディターで編集したファイルを他のファイルと一緒に変更すると、2つのまったく異なるダイアログがユーザーに表示されます。

だから問題は-私のファイルの「標準」VisualStudio「ファイルがVSの外で変更された」ダイアログを呼び出す方法はありますか?

4

1 に答える 1

1

IVSFileChangeExインターフェイスを使用しているようです。

このブログ投稿は、ほとんどあなたが探しているものかもしれません。通常、これは、ファイルを編集または再ロードできるかどうかを確認するために使用され、(チェックアウトまたは再ロード) のファイル ダイアログ プロンプトを提供します。

これはIVsQueryEditQuerySave2インターフェイスを使用します。おそらくDeclareReloadableFile、「ファイルがディスク上で変更された場合にファイルが再ロードされることを示します」を呼び出す必要があります。

private bool CanEditFile()
{
  // --- Check the status of the recursion guard
  if (_GettingCheckoutStatus) return false;

  try
  {
    _GettingCheckoutStatus = true;

    IVsQueryEditQuerySave2 queryEditQuerySave =
      (IVsQueryEditQuerySave2)GetService(typeof(SVsQueryEditQuerySave));

    // ---Now call the QueryEdit method to find the edit status of this file
    string[] documents = { _FileName };
    uint result;
    uint outFlags;

    int hr = queryEditQuerySave.QueryEditFiles(
      0, // Flags
      1, // Number of elements in the array
      documents, // Files to edit
      null, // Input flags
      null, // Input array of VSQEQS_FILE_ATTRIBUTE_DATA
      out result, // result of the checkout
      out outFlags // Additional flags
      );
    if (ErrorHandler.Succeeded(hr) && (result ==
      (uint)tagVSQueryEditResult.QER_EditOK))
    {
      return true;
    }
  }
  finally
  {
    _GettingCheckoutStatus = false;
  }
  return false;
}
于 2012-05-19T18:29:20.810 に答える