6

我正在尝试从文本框中删除选定的文本并输入新字符来代替它。例如,如果文本框包含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

4 回答 4

10

如评论中所述,上面提供的基于替换的答案很可能会替换错误的选择实例。下面的方法可以代替位置,并且不会遇到这个问题:

textbox1.Text = textbox1.Text.Substring(0, textbox1.SelectionStart) + textbox1.Text.Substring(textbox1.SelectionStart + textbox1.SelectionLength, textbox1.Text.Length - (textbox1.SelectionStart + textbox1.SelectedText.Length));
于 2013-01-17T05:02:58.833 回答
2

以下是您想要的,然后选择替换文本:)

    string _text = Convert.ToString(btn.Text);
    int iSelectionStart = txtCal.SelectionStart;
    string sBefore = txtCal.Text.Substring(0, iSelectionStart);
    string sAfter = txtCal.Text.Substring(iSelectionStart + txtCal.SelectionLength);
    txtCal.Text = sBefore + _text + sAfter;
    txtCal.SelectionStart = iSelectionStart;
    txtCal.SelectionLength = _text.Length;
于 2016-01-12T17:06:54.040 回答
1

试试这个

if (textbox1.SelectedText.Length > 0)
{
   textbox1.Text = textbox1.Text.Replace(text1.Text.Substring(textbox1.SelectionStart, textbox1.SelectionLength), btn.Text);                
}
于 2012-09-11T18:22:25.573 回答
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设置为新位置。这可能很有用,因为在像这样更改文本时插入符号索引会重置为零。您可能还希望集中文本框以吸引用户注意更改并让他们知道插入符号当前在哪里。

于 2018-08-09T20:35:49.220 回答