调用标准“文件在 Visual Studio 外部更改”对话框
本文关键字:外部 对话框 Studio Visual 标准 文件 文件在 调用 | 更新日期: 2023-09-27 18:33:06
我已经在我的VSPackage中成功创建自定义的单视图编辑器。我必须处理的许多事情之一是对在Visual Studio之外更改编辑文件的情况做出反应 - Visual Studio中的"标准"编辑器显示对话框,其中包含"是","全部是"(重新加载内容)等选项,因此如果更改了更多文件,则仅显示一个对话框。
但是,到目前为止,我在 VSPackage 中唯一能做的就是在文件更改时显示自定义对话框。这并不漂亮 - 当在我的编辑器中编辑的文件与其他一些文件一起更改时,将向用户显示两个完全不同的对话框。
所以问题是 - 有没有办法为我的文件调用"标准"Visual Studio"在VS之外更改的文件"对话框?
听起来你正在使用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;
}