如何在文本框中find光标的位置? C#

我有一个标准的WinForms文本框,我想在文本的光标位置插入文本。 我怎样才能得到光标的位置?

谢谢

无论是否select了任何文本, SelectionStart属性都代表插入文本的索引。 所以你可以使用String.Insert来注入一些文本,如下所示:

myTextBox.Text = myTextBox.Text.Insert(myTextBox.SelectionStart, "Hello world"); 

你想检查TextBoxSelectionStart属性。

詹姆斯,当你只想在光标位置插入一些文本时,你需要replace整个string是相当低效的。

更好的解决scheme是:

 textBoxSt1.SelectedText = ComboBoxWildCard.SelectedItem.ToString(); 

如果您没有select任何内容,则会在光标位置插入新文本。 如果您select了某些内容,则会将所选文字replace为您要插入的文字。

我从eggheadcafe网站find了这个解决scheme。

所有你需要做的是这样的:

双击项目(button,标签,无论),将文本插入光标处的文档。 然后input:

 richTextBox.SelectedText = "whatevertextyouwantinserted"; 

你会build议什么事件我loggingvariables? 离开?

目前我有:

 private void comboBoxWildCard_SelectedIndexChanged(object sender, EventArgs e) { textBoxSt1.Focus(); textBoxSt1.Text.Insert(intCursorPos, comboBoxWildCard.SelectedItem.ToString()); } private void textBoxSt1_Leave(object sender, EventArgs e) { intCursorPos = textBoxSt1.SelectionStart; } 

logging在离开事件正在工作,但文本不被插入,我错过了什么?

更新:我需要textBoxSt1.Text =

 textBoxSt1.Text = textBoxSt1.Text.Insert(intCursorPos, comboBoxWildCard.SelectedItem.ToString()); 

谢谢大家。

谢谢

这是我的工作实现,只需键入数字,恢复最后有效的input文本位置:

XAML:

 <TextBox Name="myTextBox" TextChanged="OnMyTextBoxTyping" /> 

代码后面:

 private void OnMyTextBoxTyping(object sender, EventArgs e) { if (!System.Text.RegularExpressions.Regex.IsMatch(myTextBox.Text, @"^[0-9]+$")) { var currentPosition = myTextBox.SelectionStart; myTextBox.Text = new string(myTextBox.Text.Where(c => (char.IsDigit(c))).ToArray()); myTextBox.SelectionStart = currentPosition > 0 ? currentPosition - 1 : currentPosition; } } 
 int cursorPosition = textBox1.SelectionStart; //it will extract your current cursor position where ever it is //textBox1 is name of your text box. you can use one //which is being used by you in your form 

您必须将SelectionStart属性保存在一个variables中,然后当您按下button时,将焦点移回文本框。 然后将SelectionStart属性设置为variables中的一个。

要在TextBox文本中单击鼠标时获取插入位置,请使用TextBox MouseDown事件。 使用MouseEventArgs X和Y属性创build一个点。 TextBox有一个名为GetCharIndexFromPosition(point) 。 通过它的重点,它返回插入的位置。 如果您正在使用鼠标确定要插入新文本的位置,则此方法可行。