2013-05-15 4 views
6

アクティブなテキストビューでキャレットの位置が変更されるたびに通知を受けたいと思います。 EnvDTEが提供していると思われる唯一のものはthe LineChanged eventです。キャレットを同じ行の中で左右に動かすと、もちろん上がりません。VS2008 VSPackageから、キャレットの位置が変更されたときにどのように通知されますか?

私はVS2010のエディタ拡張機能を使用することで汗をかくことができますが、VS2008と下位互換性のあるソリューションが必要です。

+0

IVsTextViewリファレンスがありますか? –

+0

はい、 '.GetSelection(...) 'を使用してキャレット/選択位置を取得できますが、変更されたときに通知を受け取るイベントを見つけることができませんでした。 –

+0

私はあなたがVS2008で利用可能なその情報を持っているとは思わない。あなたが得ることができる唯一のキャレットイベントは、IVsTextViewEventsからのOnCaretChangeLineです。 2つのイベント間のキャレット位置を時間内に測定する必要があります。 –

答えて

1

あなたはこの見たことがあります:それ以外のイベント文句を言わない火(COM裏打ちされたイベントオブジェクトがスコープ外に行き、GC'dだったので、私は仮定)、オブジェクトのイベントのローカルインスタンスを維持する必要がありDTE2 events don't fire

を:

public class MyVSPackage 
{ 
    TextEditorEvents _textEditorEvents; 

    public MyVSPackage() 
    { 
     _textEditorEvents = DTE.Events.TextEditorEvents; 

     _textEditorEvents.LineChanged += (point, endPoint, hint) => //Do something here 
    } 
} 
+0

はい、私はそれを認識していますが、私の元の投稿に書いたように、LineChangedは行が変更されたときにのみ発生し、列が変更されたときには発生しません。とにかく、ありがとう! –

+0

申し訳ありません。 dte.EventsをEnvDTE80.Events2にキャストすると、AfterKeyPressイベントを持つTextDocumentKeyPressEventsにアクセスできます。あなたはそれを試しましたか? (キーの押下、選択、完了)=> ' –

+0

残念ながら、AfterKeyPressがすべてのキー押下(特に、矢印キーVisual Studioの内部コマンド処理コードで先に処理されるため、起動させることはありません)。 –

関連する問題