代码之家  ›  专栏  ›  技术社区  ›  CodeRunner

使链接在richtextbox c中只读#

  •  0
  • CodeRunner  · 技术社区  · 12 年前

    我在c#中有一个richtextbox,我想使链接显示为只读。现在我可以将光标移动到其中并对其进行编辑。有什么方法可以使其只读吗?

    4 回复  |  直到 12 年前
        1
  •  1
  •   Picrofo Software    12 年前

    您可以设置RichTextBox的此属性以使整个文本只读

    只读=真

    如果您只想保护链接,但不想编辑其他文本,请尝试在Form1_Load下或您可能创建的任何方法下插入以下内容

    您需要添加 RichTextBox.Find(字符串str); 从对象浏览器

        MatchCollection mc = Regex.Matches(richTextBox1.Text, @"(www[^ \s]+|http[^ \s]+)([\s]|$)", RegexOptions.IgnoreCase); // Create a new MatchCollection and match from richTextBox1.Text
    
        for (int collection = 0; collection < mc.Count; collection++) // increase collection for every string in mc
        {
            if (richTextBox1.Find(mc[collection].Value, RichTextBoxFinds.None) > -1) // Find the mc value
            {
                richTextBox1.SelectionProtected = true; // Protect the value
            }
        }
    

    所以表格应该是这样的

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Text.RegularExpressions;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
                MatchCollection mc = Regex.Matches(richTextBox1.Text, @"(www[^ \s]+|http[^ \s]+)([\s]|$)", RegexOptions.IgnoreCase);
    
                for (int collection = 0; collection < mc.Count; collection++)
                {
                    if (richTextBox1.Find(mc[collection].Value, RichTextBoxFinds.None) > -1)
                    {
                        richTextBox1.SelectionProtected = true;
                    }
                }
    
            }
        }
    }
    

    谢谢

    祝你度过美好的一天:)

        2
  •  1
  •   Thousand    12 年前

    您可以在代码中这样更改它:

    richTextBox1.ReadOnly = true;
    

    或者,您可以转到设计视图,检查richtextbox的属性,然后设置 ReadOnly 把某事归因于某人 true

        3
  •  0
  •   AntonR    12 年前

    您应该捕获更改事件,这样您就可以重置用户想要对链接进行的每一次更改,并将其设置回原始链接。如果用户删除或添加字符,则保存链接的位置并更新位置。

        4
  •  0
  •   mutanic    11 年前

    我想分享我的解决方案。。。我确实尝试了我在互联网上找到的所有东西,但似乎我无法完全达到我想要的100%(将richtexbox作为只读)。然后我开始寻找一个替代方案,最终我得到了一个完全按照我想要的方式做的方案。

    有时我们需要在其上显示一个样式的值,这就是为什么我们第一次选择richtextbox,然后当我们无法将其设置为ReadOnly时,它就会成为一个问题。不同的是,我不再使用richtextbox,而是将其更改为标签。根据程序的工作方式,您可能需要2个控件(richtextbox&label)来保持相同的值,这些值将根据您的要求进行切换(可见的真/假)。

    请参阅我的示例以获得ReadOnly richtextbox外观相似的控件:

    <div id="History">
        <asp:Label ID="lblLACA27" runat="server" CssClass="ctlLabel"></asp:Label>
    </div>
    

    还有一段CSS代码:

        #History
        {
            height: 100px;
            float: left;
            overflow: auto;
            overflow-x: hidden;
        }
    

    包含LABEL的DIV标记将像多行textbox/rechtextbox一样显示滚动条;让我们继续编程。希望这以后能帮助到别人。