2013-05-15 15 views
6

Vorrei ricevere una notifica ogni volta che la posizione del cursore viene modificata nella visualizzazione del testo attiva. L'unica cosa che EnvDTE sembra offrire è the LineChanged event, che ovviamente non viene sollevata quando si sposta il cursore a sinistra oa destra all'interno della stessa linea.Da un VSPackage VS2008, come posso ricevere una notifica ogni volta che cambia la posizione del cursore?

Mi rendo conto che l'estensibilità dell'editor di VS2010 consente di eseguire questa operazione senza fatica, ma ho bisogno di una soluzione che sia compatibile con le versioni precedenti di VS2008.

+0

È disponibile un riferimento a IVsTextView? –

+0

Sì, e ho notato che posso ottenere la posizione di selezione/caret da esso usando '.GetSelection (...)', ma non sono riuscito a trovare un evento che mi avvisasse quando è cambiato. –

+0

Non penso che queste informazioni siano disponibili in VS2008. L'unico evento caret che puoi ottenere è OnCaretChangeLine da IVsTextViewEvents. Dovrai misurare la posizione del cursore tra due eventi nel tempo. –

risposta

1

Hai visto questo: DTE2 events don't fire

Devi tenere un'istanza locale degli eventi oggetto, altrimenti il ​​fuoco dell'evento solito (presumo perché il COM Eventi sostenuta oggetto è andato fuori del campo di applicazione ed è stato GC'd) :

public class MyVSPackage 
{ 
    TextEditorEvents _textEditorEvents; 

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

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

Sì, ne sono a conoscenza - ma come ho scritto nel mio post originale, LineChanged si verifica solo quando la Linea è cambiata, e non quando la Colonna è cambiata. Grazie comunque! –

+0

Mi dispiace per quello. Se si cast dte.Events su un EnvDTE80.Events2, si ottiene l'accesso a TextDocumentKeyPressEvents, che ha un evento AfterKeyPress. Hai provato? '(dte.Events as Events2) .TextDocumentKeyPressEvents.AfterKeyPress + = (pressione tasto, selezione, completamento) =>' –

+0

Sfortunatamente, questo non funziona neanche, dal momento che AfterKeyPress non si attiva per tutti i tasti premuti (in particolare, i tasti freccia non attivarlo, perché vengono elaborati in precedenza nel codice di gestione dei comandi interni di Visual Studio). –