0

在开发 Resharper 插件的过程中,我想在用户错误地使用上下文操作时向用户显示错误消息。有没有办法在 Visual Studio 中弹出一个窗口来将 Resharper 异常消息传达给用户?我正在使用 Resharper 8 和 VS 2012 开发一个插件

4

1 回答 1

4

您可以随时使用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 myLocksITooltipManager myTooltipManagerIActionManager myActionManager。这些可以通过 ReSharper 的组件模型注入到组件的构造函数中,或者您可以使用solution.GetComponent<IShellLocks>等获取它们。

正在发生的事情是,您正在返回一个接受 的操作ITextControl,并立即在 UI 线程上排队另一个操作以运行,并获取读取锁。这第二个动作告诉工具提示管理器将错误消息显示为工具提示,并提供用于创建弹出窗口上下文的工厂方法(该lifetime参数由对 的调用创建和处置Show,并允许清理上下文)。

您还可以查看ShowAtCaret扩展方法ITooltipManager- 我不记得Show将工具提示放在哪里。

于 2013-10-15T09:17:12.967 回答