jorgemgonzalez
asked on
How to position the cursor inside a string?
Hi Experts!
How can I set the position of the cursor to a precise point on a string?
For example: Between two html tags (<a href="blah">*</a>) I need the cursor where the asterisk is. Is there a way to get that to work?
Thanks in advance.
How can I set the position of the cursor to a precise point on a string?
For example: Between two html tags (<a href="blah">*</a>) I need the cursor where the asterisk is. Is there a way to get that to work?
Thanks in advance.
ASKER
Thanks jpaulino for your fast reply.
Let me clarify for you.
What I need is to make the I beam to appear in a given part of a text line, let's say that we have a string like this"
strAddr = "<a href=""""></a>"
Then on a click of a button the string is passed to a textbox
TextBox1.SelectedText = strAddr
Now, in TextBox1 I need to have the I beam between ">" and "<" so the user can input text without having to position the I beam.
The result should look like this: <a href="""">cursor</a> (Where "cursor" is the I beam)
Can that be done programmaticaly?
Let me clarify for you.
What I need is to make the I beam to appear in a given part of a text line, let's say that we have a string like this"
strAddr = "<a href=""""></a>"
Then on a click of a button the string is passed to a textbox
TextBox1.SelectedText = strAddr
Now, in TextBox1 I need to have the I beam between ">" and "<" so the user can input text without having to position the I beam.
The result should look like this: <a href="""">cursor</a> (Where "cursor" is the I beam)
Can that be done programmaticaly?
You can look (using IndexOf) the position of the tag "</a>" and then position the cursor there.
Something like:
Something like:
Dim str As String = Me.TextBox1.Text
Me.TextBox1.SelectionLength = 0
Me.TextBox1.SelectionStart = str.IndexOf("</a>")
Me.TextBox1.Select()
ASKER
It gives me an error: InvalidArgument=Value of '-1' is not valid for 'SelectionStart'. Parameter name: SelectionStart
-1 is because it couldn't find the expression that you have entered. Check if you really have that tag in the text or if it has spaces.
ASKER
Yup, the tag is there, it's passed to the text box by another form.
However, the length of the string may vary, on the other hand, I wonder what would happen if the tag is inserted again some text after.
This is what I have there:
However, the length of the string may vary, on the other hand, I wonder what would happen if the tag is inserted again some text after.
This is what I have there:
Private Sub cmdOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOk.Click
Dim Doc As frmDoc
Doc = frmMain.ActiveMdiChild
If Me.CheckBox1.Checked = True And Me.RadioButton1.Checked = True Then
strAddr = "<a href=" & """" & Me.TextBox1.Text & """" & ">" & Me.TextBox3.Text & "</a>"
ElseIf Me.CheckBox2.Checked = True And Me.RadioButton1.Checked = True Then
strAddr = "<a href=" & """" & Me.TextBox1.Text & """" & ">" & Me.lblImg.Text & "</a>"
ElseIf Me.CheckBox1.Checked = True And Me.RadioButton2.Checked = True Then
strAddr = "<a href=" & """" & "mailto:" & Me.TextBox1.Text & "?subject= " & Me.TextBox2.Text & """" & ">" & Me.TextBox3.Text & "</a>"
ElseIf Me.CheckBox2.Checked = True And Me.RadioButton2.Checked = True Then
strAddr = "<a href=" & """" & "mailto:" & Me.TextBox1.Text & "?subject= " & Me.TextBox2.Text & """" & ">" & Me.lblImg.Text & "</a>"
End If
Doc.TextBox1.SelectedText = strAddr
Me.Close()
End Sub
And where do you use the SelectionStart ?
>> I wonder what would happen if the tag is inserted again some text after.
If will find the first that it found and place the cursor there.
ASKER
I remember a program I tried long ago, called "Edit+", you could write your own "snippets" and you could place the cursor in that snippet by typing ^!, and when you imported your snippet the cursor appeared where the "^!" was. I which I know how they did it! :)
ASKER
No, I gave you what I had originally so you can analize the string
ASKER
That's what I was thinking, but the thing is that the tag might be repeated several times.
There mught be a trick tough.
There mught be a trick tough.
You open a MDI chield and add the text using the above code. Then you try to place the cursor where ? After this line ?
Doc.TextBox1.SelectedText = strAddr
Try this way:
Doc.TextBox1.SelectedText = strAddr
Doc.TextBox1.SelectionLeng th = 0
Doc.TextBox1.SelectionStar t = strAddr.IndexOf("</a>")
Me.Close()
Doc.TextBox1.SelectedText = strAddr
Try this way:
Doc.TextBox1.SelectedText = strAddr
Doc.TextBox1.SelectionLeng
Doc.TextBox1.SelectionStar
Me.Close()
ASKER
It works my friend, but only is there's no other text in the textbox, if there is it places the cursor somewhere else, that's exactly my dilemma.
I really appreciate your effort.
I really appreciate your effort.
>> only is there's no other text in the textbox, if there is it places the cursor somewhere else, that's exactly my dilemma.
But should place before the tag. If you have <a href="">fdsfdfs1</a> it should place after the 1 and before the tag.
Maybe I'm understanding wrongly! Can you give one or two examples of what you have an what you need (not the code but the text you have)
But should place before the tag. If you have <a href="">fdsfdfs1</a> it should place after the 1 and before the tag.
Maybe I'm understanding wrongly! Can you give one or two examples of what you have an what you need (not the code but the text you have)
ASKER
What i'm doing is a simple html editor, as such, before an anchor tag there goes a lot of text. Once that text is there, by setting the selection length at 0, the cursor goes to the place equivalent to the lenght of the tag string before the </a> (strAddr.IndexOf("</a>"))
Now, if the textbox in the parent form is empty (selection lenght = 0) then it works like a charm.
What I need is a way to get the cursor appear before </.a> anytime the tag is inserted regardless of the amount of text in the editor (textbox) if there's any.
Thanks a lot for your patience.
Now, if the textbox in the parent form is empty (selection lenght = 0) then it works like a charm.
What I need is a way to get the cursor appear before </.a> anytime the tag is inserted regardless of the amount of text in the editor (textbox) if there's any.
Thanks a lot for your patience.
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
ASKER
With this other approach:
Doc.TextBox1.SelectionLeng th = 0
Doc.TextBox1.SelectionStar t = Doc.TextBox1.Text.IndexOf( "</a>")
Me.Close()
it works fine, the problem I have still is that if the user needs to add another link tag after some other text then the selection will be at the first </a>
What can be done?
Doc.TextBox1.SelectionLeng
Doc.TextBox1.SelectionStar
Me.Close()
it works fine, the problem I have still is that if the user needs to add another link tag after some other text then the selection will be at the first </a>
What can be done?
ASKER
Well, I figured out that using:
Dim StartPos As Integer = Doc.TextBox1.SelectionStar t
Doc.TextBox1.SelectedText = strAddr
Doc.TextBox1.SelectionLeng th = StartPos
Doc.TextBox1.SelectionStar t = StartPos + strAddr.IndexOf("</a>")
Doc.TextBox1.Select()
Doc.TextBox1.SelectionLeng th = 0
it works on every occasion, I just don't know how orthodox or appropriate the method is, but it's working!
Thanks a million jpaulino for pointing me in the right direction.
Dim StartPos As Integer = Doc.TextBox1.SelectionStar
Doc.TextBox1.SelectedText = strAddr
Doc.TextBox1.SelectionLeng
Doc.TextBox1.SelectionStar
Doc.TextBox1.Select()
Doc.TextBox1.SelectionLeng
it works on every occasion, I just don't know how orthodox or appropriate the method is, but it's working!
Thanks a million jpaulino for pointing me in the right direction.
ASKER
Thanks for your patience
Look to this example how to use that:
http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.selectionstart(VS.85).aspx