从文本框中删除所选文本并在C#.NET中输入新字符

时间:2012-09-11 18:14:25

标签: c#-4.0

我正在尝试从文本框中删除所选文本并输入新字符代替它。 例如,如果文本框由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;
}

有谁能告诉我我的错误在哪里?

4 个答案:

答案 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设置到新位置。这可能很有用,因为在像这样更改文本时,插入号索引会重置为零。您可能还需要集中文本框,以吸引用户对更改的注意,并让他们知道当前插入符号的位置。