我正在尝试从文本框中删除所选文本并输入新字符代替它。
例如,如果文本框由123456
和我选择345
组成,并在键盘上按 r ,则应替换所选文本。
这是我的代码:
string _selectText = txtCal.SelectedText;
string _text = Convert.ToString(btn.Text);
if (_selectText.Length > 0) {
int SelectionLenght = txtCal.SelectionLength;
string SelectText = txtCal.Text.Substring(txtCal.SelectionStart, SelectionLenght);
txtCal.Text = ReplaceMethod(SelectText, _text);
}
//replace method function
public string ReplaceMethod(string replaceString, string replaceText) {
string newText = txtCal.Text.Replace(replaceString, replaceText);
return newText;
}
有谁能告诉我我的错误在哪里?
答案 0 :(得分:10)
如上所述,基于替换的答案很可能取代错误的选择实例,如评论中所述。以下工作取决于职位,并没有遇到这个问题:
textbox1.Text = textbox1.Text.Substring(0, textbox1.SelectionStart) + textbox1.Text.Substring(textbox1.SelectionStart + textbox1.SelectionLength, textbox1.Text.Length - (textbox1.SelectionStart + textbox1.SelectedText.Length));
答案 1 :(得分:2)
以下是您想要的,然后选择替换文本:)
<Enter>
答案 2 :(得分:1)
试试这个
if (textbox1.SelectedText.Length > 0)
{
textbox1.Text = textbox1.Text.Replace(text1.Text.Substring(textbox1.SelectionStart, textbox1.SelectionLength), btn.Text);
}
答案 3 :(得分:1)
这与其他答案基本相同,但是使用C#6.0的格式不同。
// If there is selected text, it will be removed before inserting new text.
// If there is no selected text, the new text is inserted at the caret index.
string before = textBox.Text.Substring(0, textBox.SelectionStart);
string after = textBox.Text.Substring(textBox.SelectionStart + textBox.SelectedText.Length);
textBox.Text = $"{before}{insertText}{after}";
textBox.CaretIndex = $"{before}{insertText}".Length;
请注意,在更改文本后 ,我将CaretIndex
设置到新位置。这可能很有用,因为在像这样更改文本时,插入号索引会重置为零。您可能还需要集中文本框,以吸引用户对更改的注意,并让他们知道当前插入符号的位置。