【问题标题】:How to disable edit first line of RichTextBox?如何禁用编辑 RichTextBox 的第一行?
【发布时间】:2018-08-13 16:51:16
【问题描述】:

我通过

设置了richtextbox的第一行
RichTextBox.text = "Comment:";

我希望这一行只读,并从第二行输入,并从第二行开始获取文本。

有什么建议吗?谢谢!


谢谢,我添加了一个MouseClick 事件来禁止第一行可编辑:

 private void CommentTxtBox_MouseClick(object sender, MouseEventArgs e)
    {
        int index = _commentTxtBox.SelectionStart;
        int line = _commentTxtBox.GetLineFromCharIndex(index);
        if (line == 0)
        {
            _commentTxtBox.ReadOnly = true;
        }
        else
            _commentTxtBox.ReadOnly = false;

    }

【问题讨论】:

  • 为什么不直接使用标签Comment:,然后使用完全可编辑的富文本框?
  • @Rafalon 实现起来难吗?
  • 99% 的表单都是由一个标签和一个完全可编辑的控件组成的,所以我认为它很难实现。您很可能可以在互联网上找到大量示例
  • 标签不会被选中或复制。嵌套时会覆盖 RTB 的文本;当不嵌套时,它不会被集成。保存时,您需要将其附加到文本中,包括格式。它不会被打印出来。 - 所以,有一些缺点,可能对你来说很重要,也可能无关紧要..
  • @TaW 每行开头保存同一个字符串的信息价值是什么?如果它存储在数据库中,那么只需使用名为COMMENT 的列就足够了,你不觉得吗?无论如何,我将其发布为评论正是因为它没有回答问题,而是询问它所问的是否是 OP 需要的,你是对的,这取决于它是否对 OP 重要:)

标签: c# winforms richtextbox


【解决方案1】:

您可以使用SelectionProtected

获取或设置一个值,指示当前文本选择是否为 受保护。

例如,您在控件中有“评论:”,用户可以在其后附加文本,但不能删除您的文本。

所以,我将前 7 个字符设为 ReadOnly,添加一个换行符,然后您的控件的其余部分变为可修改:

RichTextBox.Select(0, "Comment:".Length);
RichTextBox.SelectionProtected = true;
RichTextBox.AppendText(Environment.NewLine);

【讨论】:

  • 这是迄今为止我错过的一个有趣的属性。但这可能还不够:在属性更改为不同的值或插入点移动到控件内的不同段落之前,保护设置都适用。
  • @TaW 你错过了第一部分,我想,If no text is currently selected,,在代码中,我已经选择了“评论:”
  • 确实如此。事实上,我错过了下一段。非常酷的解决方案;我刚刚测试过,它可以让你保护文本的多个部分。
【解决方案2】:

你可以试试这个:

private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
    int line = richTextBox1.GetLineFromCharIndex(richTextBox1.SelectionStart);
    richTextBox1.ReadOnly = line == 0;
}

没有经过非常严格的测试;它只允许您在选择/光标不在第一行时进行编辑..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多