Resharper プラグインの開発中に、ユーザーがコンテキスト アクションを誤って使用した場合にエラー メッセージを表示したいと考えています。Resharper 例外メッセージをユーザーに伝えるために、Visual Studio でウィンドウをポップアップ表示する方法はありますか? 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
。solution.GetComponent<IShellLocks>
これらは、ReSharper のコンポーネント モデルによってコンポーネントのコンストラクターに注入するか、またはなどで取得できます。
何が起こっているかというと、 を受け取るアクションを返し、ITextControl
すぐに実行する別のアクションを UI スレッドでキューに入れ、読み取りロックを取得します。この 2 番目のアクションは、エラー メッセージをツールヒントとして表示するようにツールヒント マネージャに指示し、ポップアップ ウィンドウ コンテキストを作成するためのファクトリ メソッドを提供します (lifetime
パラメータは への呼び出しによって作成および破棄されShow
、コンテキストのクリーンアップを可能にします)。
ShowAtCaret
拡張メソッドを見ることもできますITooltipManager
-ツールチップがどこに配置されるかをすぐに思い出せませんShow
。