C# VisualStudio2010SDK,获取插入符号列

C# VisualStudio2010SDK,获取插入符号列,c#,.net,visual-studio-2010,C#,.net,Visual Studio 2010,很明显,但我想知道插入符号离左边有多远。 目前我有以下几行 var caret = m_doc.Caret.Position.BufferPosition; return doc.GetTextViewLineContainingBufferPosition(caret).Start.Difference(caret); 其中doc是一个IWpfTextView 问题是,如果您有一个选项卡,它会将该选项卡计算为一个,而不是计算该选项卡中的空格数 示例-|表示光标所在的位置,\t一个大小为4的选

很明显,但我想知道插入符号离左边有多远。 目前我有以下几行

var caret = m_doc.Caret.Position.BufferPosition;
return doc.GetTextViewLineContainingBufferPosition(caret).Start.Difference(caret);
其中doc是一个IWpfTextView

问题是,如果您有一个选项卡,它会将该选项卡计算为一个,而不是计算该选项卡中的空格数

示例-|表示光标所在的位置,\t一个大小为4的选项卡,charNo是我的代码当前返回的值,col是我想要的值:

|var a  //col:0 charNo:0
\t|var  //col:4 charNo:1
 \t|var //col:4 charNo:2
 \tv|ar //col:5 charNo:3

谢谢。

为什么不使用
.Left
而不是
。Start
?从坐标平面左侧返回当前位置,而不考虑制表符。

为什么不使用
.Left
而不是
.Start
?它从坐标平面的左侧返回当前位置,而不考虑制表符。

Left返回一个双精度值,我认为它是从左侧开始的像素数。msdn表示:文本渲染坐标系中的距离对应于逻辑像素。如果显示的文字渲染曲面没有任何缩放变换,则文字渲染坐标系中的1个单位对应于显示器上的一个像素。但我不是在看像素的位置,我是在看列,正如我的例子所示,我是在看你身上有多少个字符,而是把标签视为它所代表的空格数。。。你改变了你的问题。你应该注意,在某种程度上,当你这样做的时候,Left返回一个double,我想它是从左边开始的像素数。msdn表示:文本渲染坐标系中的距离对应于逻辑像素。如果显示的文字渲染曲面没有任何缩放变换,则文字渲染坐标系中的1个单位对应于显示器上的一个像素。但我不是在看像素的位置,我是在看列,正如我的例子所示,我是在看你身上有多少个字符,而是把标签视为它所代表的空格数。。。你改变了你的问题。你应该注意,当你这样做的时候。