在开发 Resharper 插件的过程中,我想在用户错误地使用上下文操作时向用户显示错误消息。有没有办法在 Visual Studio 中弹出一个窗口来将 Resharper 异常消息传达给用户?我正在使用 Resharper 8 和 VS 2012 开发一个插件
1 回答
您可以随时使用MessageBox
- ReSharper 还提供了一个MessageBox
静态类,该类提供了许多帮助方法,可以轻松显示您想要的内容。它还允许添加“消息框处理程序”,这样您就不会在测试期间实际显示消息框。
或者,如果您正在创建上下文操作,并且您(间接)从 派生BulbActionBase
,则您的ExecutePsiTransaction
方法(应该完成所有工作)可以返回一个Action<ITextControl>
. 这允许您返回将在快速修复/上下文操作完成后执行的操作,可以是定位插入符号、更改选择、执行模板或将工具提示显示为错误的任何内容。
您可以返回如下内容:
return tc => myLocks.QueueReadLock("MyContextAction", () => {
myTooltipManager.Show("Something went wrong!",
lifetime => new TextControlPopupWindowContext(lifetime, tc, myLocks, myActionManager);
});
这使用了许多字段IShellLocks myLocks
:ITooltipManager myTooltipManager
和IActionManager myActionManager
。这些可以通过 ReSharper 的组件模型注入到组件的构造函数中,或者您可以使用solution.GetComponent<IShellLocks>
等获取它们。
正在发生的事情是,您正在返回一个接受 的操作ITextControl
,并立即在 UI 线程上排队另一个操作以运行,并获取读取锁。这第二个动作告诉工具提示管理器将错误消息显示为工具提示,并提供用于创建弹出窗口上下文的工厂方法(该lifetime
参数由对 的调用创建和处置Show
,并允许清理上下文)。
您还可以查看ShowAtCaret
扩展方法ITooltipManager
- 我不记得Show
将工具提示放在哪里。