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