C#にリッチテキストボックスがあり、読み取り専用として表示されるリンクを作成したいと思います。今、カーソルをその中に移動して編集することができます。読み取り専用にする方法はありますか?
4 に答える
次のようにコードで変更できます。
richTextBox1.ReadOnly = true;
または、デザインビューに移動し、リッチテキストボックスのプロパティを確認して、ReadOnly
属性をに設定することもできますtrue
。
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;
}
}
}
}
}
ありがとう、
すてきな一日を :)
ユーザーがリンクに対して行うすべての変更をリセットし、元のリンクに戻すように、変更イベントをキャプチャする必要があります。リンクの位置を保存し、ユーザーが文字を削除または追加した場合は位置を更新します。
私の解決策を共有したいと思います...私はインターネットで見つけたすべてを試しましたが、私が望むように正確に100%を得ることができないようです(読み取り専用としてrichtexboxを作成するため)。それから私は私が望むように最終的に私がそれをするようにさせる代替案を探し始めます。
値をスタイル付きで表示する必要がある場合があります。そのため、最初にリッチテキストボックスを選択すると、読み取り専用にできない場合に問題になります。違いは、リッチテキストボックスを使用しなくなったのですが、ラベルに変更したことです。プログラムの動作によっては、要件に基づいて切り替えられる(true / falseが表示される)同じ値を保持するために、2つのコントロール(richtextboxとlabel)が必要になる場合があります。
ReadOnlyリッチテキストボックスをそっくりのコントロールにするには、ここで私の例を参照してください。
<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タグは、スクロールバーが表示された複数行のテキストボックス/リッチテキストボックスのように機能します。以上で、プログラミングを続けましょう。これが後で誰かを助けることを願っています。