如何在文本框中find光标的位置? C#
我有一个标准的WinForms文本框,我想在文本的光标位置插入文本。 我怎样才能得到光标的位置?
谢谢
无论是否select了任何文本, SelectionStart属性都代表插入文本的索引。 所以你可以使用String.Insert来注入一些文本,如下所示:
myTextBox.Text = myTextBox.Text.Insert(myTextBox.SelectionStart, "Hello world");
你想检查TextBox
的SelectionStart
属性。
詹姆斯,当你只想在光标位置插入一些文本时,你需要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)
。 通过它的重点,它返回插入的位置。 如果您正在使用鼠标确定要插入新文本的位置,则此方法可行。