2017-07-14 14 views
1

richTextBoxに書式設定されたテキストとテーブルを追加します。richTextBox - テキストとテーブルを追加する

はこのために私はこれらのコードを使用します。

テキスト:

richTextBox1.SelectionFont = new Font("Maiandra GD", 30, FontStyle.Bold); 
richTextBox1.SelectionColor = Color.Red; 
richTextBox1.SelectionIndent = 0; 
richTextBox1.AppendText("text text text"); 

とテーブル:

StringBuilder tableRtf = new StringBuilder(); 

tableRtf.Append(@"{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}"); 
for (int j = 0; j <5; j++) 
{ 
    tableRtf.Append(@"\trowd"); 
    tableRtf.Append(@"\cellx2500" + " ghhghgjghjghjhggjh"); 
    tableRtf.Append(@"\intbl\cell"); 
    tableRtf.Append(@"\cellx10000\intbl\cel"); 
    tableRtf.Append(" " + "sdfsdfs" + @"\intbl\clmrg\cell\row"); 
} 

tableRtf.Append(@"\pard"); 
tableRtf.Append(@"}"); 
richTextBox1.Rtf=tableRtf.ToString(); 

しかし

richTextBox1.Rtf=tableRtf.ToString(); 

は、以前の内容を殺します。

どうすれば対応できますか?

1)このように、リッチテキストボックスにフォーマットのテキストを追加します:

richTextBox1.SelectionFont = new Font("Maiandra GD", 30, FontStyle.Bold); 
richTextBox1.SelectionColor = Color.Red; 
richTextBox1.AppendText("text text text"); 

これはよく読めると私は簡単に変更することができます私は2つのことをしたいので


それは重複しません。

2)そしてテーブルを追加したいと思います。

だから、構造:

テキストテキストテキストテキストテキスト テキストテキストテキストテキストテキスト

| TABLE |

テキストテキストテキストテキストテキストテキストテキストテキスト テキストテキスト テキストテキストテキストテキストテキスト

| TABLE |

など

しかし、私は前の内容を失うことなく、テーブルを適用することができます方法がわかりませんか?

+1

可能な重複(https://stackoverflow.com/questions/6485156/adding-strings-to-a-richtextbox-in-c-sharp) – mjwills

+0

あなたはrichTextBox1.Rtf = tableRtf.Rtfをしたいですか? ? .ToStringを呼び出すと、システム文字列だけが表示されます。これは明らかに書式設定を保持していません。 –

+1

@Joe_DMしかし、フォーマットは明らかに文字列 –

答えて

2

あなたがする必要があるのは、rtfコードをヘッダーとボディに分解することです。

テーブル本体はループから始まり、\parのままにしておくことをお勧めします。

しかし、古いテキストを置き換えたり、本文を末尾に追加したりすることはできません。

代わりに、の前にを挿入する必要があります。これは、最後のカーリーは、rtfコードとそれ以外のものはすべて無視されてしまうため終了します。

これは簡単でした。

フル解決策として、ヘッダーを組み合わせることもできます。

これはもっと多くの作業であり、すべてを書くことはSOの回答を超えています。

しかし、基本的な原理は単純です:

あなたのテーブルヘッダは原初のヘッダーですでに物事に追加されます事を理解する必要があります。

最も一般的なものはfont tablecolor tableです。

だからあなたは別表の1つ以上の異なるフォントを使用したい場合は、この操作を行う必要があります。

  • が新しいフォントインデックス、例えばとフォントテーブルに追加します前のセミコロンの後には\f1\fnil Consolas;となります。
  • 最初の\intbl表段落書式設定制御語の直後に新しいフォントを含めるようにループを変更して使用します。\intbl\f2\fs24 ghhghgjghjghjhggjh
  • テーブル内の異なるフォントを使用する場合は、必要に応じて繰り返します。
  • cfNフォントカラーセレクタを追加します。

同じ考えがカラーテーブルでも機能します。明示的な索引付けはしていません。すべての色は、端部でセミコロンで、それぞれが付加されている:

{\colortbl ;\red255\green0\blue0;\red25\green0\blue220;} 

は、フォーマットされたテキストから赤色に青色を..adds。

あなたはこれが仕事であり、何らかの努力と準備が必要です。

full rtf specs hereがあります。ここ

は、RTFとほとんどを再生するスクリーンショットである..:テーブルヘッダの部分を制御することによって作成されたこと

enter image description here

注。あなたは、このためのダミーコントロールを使用することをお勧めしますまたは多分あなたが必要と必要されていないどの部分を見つけ出すことができます。..

アップデート:ここでバージョン「ダミーのための追加のRTF」です:

tableRtf.Append(@"{\fonttbl{\f0\fnil\fcharset0 Courier;}}"); 
for (int j = 0; j <5; j++) 
{ 
    tableRtf.Append(@"\trowd"); 
    tableRtf.Append(@"\cellx2500" + " ghhghgjghjghjhggjh"); 
    tableRtf.Append(@"\intbl\cell"); 
    tableRtf.Append(@"\cellx10000\intbl\cel"); 
    tableRtf.Append(" " + "sdfsdfs" + @"\intbl\clmrg\cell\row"); 
} 

tableRtf.Append(@"\pard"); 
tableRtf.Append(@"}"); 

string rtf1 = richTextBox1.Rtf.Trim().TrimEnd('}'); 
string rtf2 = tableRtf.ToString(); 
richTextBox1.Rtf = rtf1 + rtf2; 
は、

テーブル本体の前に挿入されたフォントテーブルが機能することに注意してください。ただし、rtf-startタグを追加しないでください! [C#でリッチテキストボックスに文字列を追加する]の

enter image description here

+0

私はこの問題を解決しました。あなたの時間とあなたの非常に詳細な答えをありがとう! – kovak

関連する問題