1

我已经在我的 VSPackage 中成功创建了自定义单视图编辑器。我必须处理的许多事情之一是对在 Visual Studio 外部更改编辑文件时的情况做出反应 - Visual Studio 中的“标准”编辑器显示对话框,其中包含“是”、“对所有”(重新加载内容)等选项,因此,如果更改了更多文件,则只显示一个对话框。

但是,到目前为止,我在 VSPackage 中唯一能做的就是在文件更改时显示自定义对话框。这并不漂亮 - 当我的编辑器中编辑的文件与其他一些文件一起更改时,将向用户显示两个完全不同的对话框。

所以问题是 - 有什么方法可以为我的文件调用“标准”Visual Studio“文件在 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 回答