【问题标题】:InvalidArgument with SelectionStart when handling backspace处理退格时带有 SelectionStart 的 InvalidArgument
【发布时间】:2014-08-10 01:33:59
【问题描述】:

刚开始使用 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();
    }

任何帮助将不胜感激。 谢谢。

【问题讨论】:

    标签: c# richtextbox


    【解决方案1】:

    当光标放在文本的开头时,index 的值变为-1,这对于SelectionStart 来说是无效值。请注意,您需要忽略该位置的退格按钮,因为那里没有什么可以删除的。所以只需使用if

    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();
    }
    

    【讨论】:

    • 根据您的建议更改我的代码后,异常消失了,但是当光标回到第 1 行的开头(没有任何内容可删除)时,MessageBox 永远不会出现,并且焦点/ RichTextBox 中的光标不再闪烁。
    • 好的。代码不清楚消息框,所以如果光标位于第一行的开头,您希望它显示吗?
    • 最好是。感谢您的帮助。
    • 完美运行感谢 Alizera。
    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2016-11-25
    • 2018-01-25
    • 1970-01-01
    • 2016-05-27
    相关资源
    最近更新 更多