RichTextBoxにはImagesまたはObjectsコレクションがないので、RTFフォーマットコードのために移動する必要があります。 RichTextBoxのすべてのデータは、特別な書式設定コードを含むプレーンテキストとして保存されます。これは、RTFプロパティを使用してコントロールによって公開されます。このコード言語を読んだり変更したりするには、このコード言語を学ぶことが不可欠です。学習リソースはウェブ全体で簡単に利用できます。たとえば、この概要を参照してください。 RichTextBoxは、MS Wordなどのいくつかのフル機能エディタよりも単純化されたRTFコードを使用しているため、データを操作する前にRTBにデータをロードするのが通常有益です。
短い話をすると、「pict」コマンドまたは「object」コマンドで始まるrtfグループを検索する必要があることがわかりました。グループがネストされていることが分かっているので、そこから最初の終了グループのcharを見つけることはできません。charの文字列を解析し、グループの終了を見つけるためにグループ化のカウントを維持する必要があります。これで文字列のその部分を削除するのに十分な情報が得られました。 Rtfには複数の画像/オブジェクトグループが含まれているので、すべてを削除するまでこれを行う必要があります。これらのグループを削除した後にrtf stringを返すサンプル関数を次に示します:
private string removeRtfObjects(string rtf)
{
//removing {\pict or {\object groups
string pattern = "\\{\\\\pict|\\{\\\\object";
Match m = Regex.Match(rtf, pattern);
while (m.Success) {
int count = 1;
for (int i = m.Index + 2; i <= rtf.Length; i++) {
//start group
if (rtf(i) == '{') {
count += 1;
//end group
} else if (rtf(i) == '}') {
count -= 1;
}
//found end of pict/object group
if (count == 0) {
rtf = rtf.Remove(m.Index, i - m.Index + 1);
break; // TODO: might not be correct. Was : Exit For
}
}
m = Regex.Match(rtf, pattern);
//go again
}
return rtf;
}
これはいつ行う必要がありますか?あなたはすでにペーストに言及しています。また、Insertもあります。これらは、クリップボード情報を取得し、それに応じて処理するKeyDownイベントでトラップできます。 e.Handled = Trueを設定すると、操作を処理したときに、コントロールがこのキーの組み合わせに対してデフォルトの処理を行わないことが通知されます。これは、ユーザーのクリップボードを破壊することなく画像を貼り付ける方法をブロックする方法です。例:
private void RichTextBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
//aware of Paste or Insert
if (e.Control && e.KeyCode == Keys.V || e.Shift && e.KeyCode == Keys.I) {
if (Clipboard.ContainsImage || Clipboard.ContainsFileDropList) {
//some images are transferred as filedrops
e.Handled = true;
//stops here
} else if (Clipboard.ContainsData(DataFormats.Rtf)) {
RichTextBox rtbox = new RichTextBox();
//use a temp box to validate/simplify
rtbox.Rtf = Clipboard.GetData(DataFormats.Rtf);
this.RichTextBox1.SelectedRtf = this.removeRtfObjects(rtbox.Rtf);
rtbox.Dispose();
e.Handled = true;
}
}
}
がTextAreaのようなものではないのですか? –
@EuclidesMulémbwè - 彼は太字、イタリックのようなすべての機能を必要とするかもしれませんが、画像はありません –
@DJKRAZEもし彼が読み取り専用を使用していれば、キーボードでテキストを追加することもできません。 –