Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理退格时使用SelectionStart的InvalidArgument_C#_Richtextbox - Fatal编程技术网

C# 处理退格时使用SelectionStart的InvalidArgument

C# 处理退格时使用SelectionStart的InvalidArgument,c#,richtextbox,C#,Richtextbox,我刚开始使用C语言。我在Windows窗体中创建了一个简单的文本编辑器,该编辑器将文本文件加载到只读的富文本框中。如果我选择使用编辑按钮编辑文件,则会弹出Form2,并允许我附加或删除字符。 我遇到的问题是,如果光标位于文本文件的开头,并且我按下了我所做的退格按钮,我会得到一个异常InvalidArgument=值'-1'对于'SelectionStart'无效。 我已经尝试了很多事情,在尝试了一整天不同的事情之后,我想知道能做些什么来解决这个问题 private void bu

我刚开始使用C语言。我在Windows窗体中创建了一个简单的文本编辑器,该编辑器将文本文件加载到只读的富文本框中。如果我选择使用编辑按钮编辑文件,则会弹出Form2,并允许我附加或删除字符。 我遇到的问题是,如果光标位于文本文件的开头,并且我按下了我所做的退格按钮,我会得到一个异常InvalidArgument=值'-1'对于'SelectionStart'无效。 我已经尝试了很多事情,在尝试了一整天不同的事情之后,我想知道能做些什么来解决这个问题

        private void button32_Click(object sender, EventArgs e)     //BackSpace button
    {

        int index = richTextBox.SelectionStart - 1;
        richTextBox.SelectionStart = index;
        if (richTextBox.Text.Length < 1) MessageBox.Show("  Nothing to Undo  ");

            //Otherwise, delete character when button press, (one character at a time).
        else

       richTextBox.Text = richTextBox.Text.Remove(richTextBox.SelectionStart - 1, 1);
      richTextBox.Focus();
    }
任何帮助都将不胜感激。
谢谢。

当光标放在文本开头时,index的值变为-1,这对于SelectionStart无效。请注意,您需要忽略该位置的backspace按钮,因为那里没有要删除的内容。因此,只需使用if:


根据您的建议修改代码后,异常消失了,但当光标回到第1行的开头时,消息框再也不显示,没有任何东西可以删除,并且焦点/光标不再在RichTextBox.OK中闪烁。messagebox的代码不清楚,因此您希望它显示光标是否在第一行的开头?是的。谢谢你的帮助。非常好。谢谢你。
private void button32_Click(object sender, EventArgs e) 
{
        int index = richTextBox.SelectionStart - 1;
        if (richTextBox.Text.Length > 0 && index >= 0)
        {
            richTextBox.SelectionStart = index;

            richTextBox.Text = richTextBox.Text.Remove(index, 1);
            richTextBox.SelectionStart = index;
        }
        else
            MessageBox.Show("  Nothing to Undo  ");
        richTextBox.Focus();
}