调用标准“文件在 Visual Studio 外部更改”对话框

本文关键字:外部 对话框 Studio Visual 标准 文件 文件在 调用 | 更新日期: 2023-09-27 18:33:06

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

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

所以问题是 - 有没有办法为我的文件调用"标准"Visual Studio"在VS之外更改的文件"对话框?

调用标准“文件在 Visual Studio 外部更改”对话框

听起来你正在使用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;
}