在richtextbox c#中只读链接

时间:2012-10-01 19:47:44

标签: c# url richtextbox readonly

我在c#中有一个richtextbox,我希望将链接显示为readonly。现在我可以将光标移动到它并编辑它。有没有办法让它只读?

4 个答案:

答案 0 :(得分:1)

您可以在代码中更改它:

richTextBox1.ReadOnly = true;

或者您可以转到设计视图,检查richtextbox的属性并将ReadOnly属性设置为true

答案 1 :(得分:1)

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

ReadOnly = true

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

您需要在对象浏览器中添加 RichTextBox.Find(string 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 :(得分:0)

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

答案 3 :(得分:0)

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

有时我们需要在其上显示带有样式的值,这就是为什么我们在第一次选择richtextbox,然后当我们无法将其设置为ReadOnly时它就成了问题。不同的是我不再使用richtextbox,但我将其更改为标签。根据您的程序的工作方式,您可能需要使用2个控件(richtextbox和amp; 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标记将像多行文本框/ richtextbox一样,其上显示滚动条。多数民众赞成让我们继续编程。希望这会有所帮助。