I'm looking for some code that will give me the caret position or character
position in a textbox (VB.net 2005). I'm looking for a way to determine the
position if clicked in the textbox or if the user arrows back and forth
between text characters. I want to display the column number or character
position as you would see in a text editor.
Any help is greatly appreciated!
JerryM
Herfried K. Wagner [MVP] - 15 Dec 2006 22:25 GMT
"JerryWEC" <JerryWEC@newsgroups.nospam> schrieb:
> I'm looking for some code that will give me the caret position or
> character position in a textbox (VB.net 2005). I'm looking for a way to
> determine the position if clicked in the textbox or if the user arrows
> back and forth between text characters. I want to display the column
> number or character position as you would see in a text editor.
Getting and setting the position of the caret in a textbox control
<URL:http://dotnet.mvps.org/dotnet/faqs/?id=textboxcaretpos&lang=en>

Signature
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>
Linda Liu [MSFT] - 18 Dec 2006 04:53 GMT
Hi Jerry,
Based on my understanding, you'd like to display the line index and column
index of the caret in a TextBox control. If I'm off base, please feel free
to let me know.
What Herfried has suggested is to use some Win32 APIs to get the character
index of the caret in a TextBox control. I have performed a test based on
Herfried's sample code and confirmed it works.
In fact, TextBoxBase class has already provided a property called
'SelectionStart', which does the same thing as the CaretPosition property
of Herfried's ExtendedTextBox does.
To get the line index of the caret in a TextBox control, we could use the
GetLineFromCharIndex method of the TextBox. As for the column index,
TextBox hasn't supplied a property or method for us to get the information.
Fortunately, we could get it using the GetFirstCharIndexFromLine method.
The following is a sample code snippet to get the line index and column
index of the caret in a TextBox control.
dim lineindex as Integer =
Me.TextBox1.GetLineFromCharIndex(Me.TextBox1.SelectionStart)
dim columnindex as Integer = Me.TextBox1.SelectionStart -
Me.TextBox1.GetFirstCharIndexFromLine(Me.TextBox1.GetLineFromCharIndex(Me.Te
xtBox1.SelectionStart))
Hope this helps.
If my suggestion is not appropriate for your practice, please feel free to
let me know.
Sincerely,
Linda Liu
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.
Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
Kevin Spencer - 19 Dec 2006 11:42 GMT
TextBox.SelectionStart, TextBox.SelectionLength, and TextBox.SelectedText
are all you need.
The position of the caret is always at SelectionStart. This is the index of
the caret in the character array (string) in the TextBox.
If there is no Selection, SelectionLength will be 0.

Signature
HTH,
Kevin Spencer
Microsoft MVP
Bit Player
http://unclechutney.blogspot.com
Expect the unaccepted.
> I'm looking for some code that will give me the caret position or
> character position in a textbox (VB.net 2005). I'm looking for a way to
[quoted text clipped - 5 lines]
>
> JerryM