C# 如何在VisualStudio2010 extension中获取文本光标的绝对位置
我开发了一个类似智能感知的对话框,它应该出现在特定的按键上。(我的项目是一个VS包,我的对话框将作为命令打开) 问题是,我不知道如何在当前光标位置显示对话框。有一些简单的方法可以处理当前选定的文本,例如C# 如何在VisualStudio2010 extension中获取文本光标的绝对位置,c#,visual-studio-2010,envdte,vsix,visual-studio-extensions,C#,Visual Studio 2010,Envdte,Vsix,Visual Studio Extensions,我开发了一个类似智能感知的对话框,它应该出现在特定的按键上。(我的项目是一个VS包,我的对话框将作为命令打开) 问题是,我不知道如何在当前光标位置显示对话框。有一些简单的方法可以处理当前选定的文本,例如 TextSelection objSel = (EnvDTE.TextSelection)(dte.ActiveDocument.Selection); 但我在这里无法获得任何绝对位置 我找了很多,但是没有找到任何可以帮助我的东西。 也许有人可以给我一个提示,或者——甚至更好——编写示例来解
TextSelection objSel = (EnvDTE.TextSelection)(dte.ActiveDocument.Selection);
但我在这里无法获得任何绝对位置
我找了很多,但是没有找到任何可以帮助我的东西。
也许有人可以给我一个提示,或者——甚至更好——编写示例来解决我的问题。我真的很感激你的帮助 在当前项目中,我正在做完全相同的事情,因此这里是相关的代码拷贝和粘贴。我使用以下答案在别处生成
activeWpfTextView
对象:
在代码中添加了一条注释,说明
parent
的来源。
private IVsWindowFrame GetWindow()
{
// parent is the Microsoft.VisualStudio.Shell.ToolWindowPane
// containing this UserControl given in the constructor.
var window = (ToolWindowPane)parent.GetIVsWindowPane();
return (IVsWindowFrame)window.Frame;
}
private void DoShow()
{
var window = GetWindow();
var textViewOrigin = (activeWpfTextView as UIElement).PointToScreen(new Point(0, 0));
var caretPos = activeWpfTextView.Caret.Position.BufferPosition;
var charBounds = activeWpfTextView
.GetTextViewLineContainingBufferPosition(caretPos)
.GetCharacterBounds(caretPos);
double textBottom = charBounds.Bottom;
double textX = charBounds.Right;
Guid guid = default(Guid);
double newLeft = textViewOrigin.X + textX - activeWpfTextView.ViewportLeft;
double newTop = textViewOrigin.Y + textBottom - activeWpfTextView.ViewportTop;
window.SetFramePos(VSSETFRAMEPOS.SFP_fMove, ref guid,
(int)newLeft, (int)newTop,
0, 0);
window.Show();
resultsList.Focus();
}