- PR -

リッチテキストボックスについて

投稿者投稿内容
ゆき
大ベテラン
会議室デビュー日: 2003/11/02
投稿数: 121
投稿日時: 2004-08-04 14:08
こんにちわ
リッチテキストボックスに書いた文書を、
ピクチャーボックスに表示させたいのでが、
何かよい方法はないでしょうか?
(一文字ずつFontやColorの情報を取ってやってみたのですが、
これだとやはり膨大な量になり、また、GraphicsのMeasureString
で文字の表示座標を測っていくとずれてしまって、うまくいきません。)
よろしくお願いいたします。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-08-04 14:42
何かのトリガー(ボタンクリックなど)に応じて表示するのであれば、
RichTextBoxの描画内容をImageとして保持するようにしてはいかがでしょう?

描画内容を取り出す一例として、RichTextBoxを派生させ、OnPaint()を以下のようにオーバーライドします
コード:
class MyRichTextBox : RichTextBox {

  private Image offImage; // offImageはどこかで構築しておく

  protected void OnPaint(PaintEventArgs e) {
    Graphics oggGraphics = null;
    try {
	oggGraphics = Graphics.FromImage(offImage) 
	base.OnPaint(new PaintEventArgs(oggGraphics, e.ClipRectangle));
  }
  finally {
	oggGraphics.Dispose();
  }
	
  e.Graphics.DrawImage(offImage, 0, 0);
  }
}



あとは、取り出した描画内容(offImage)をPictureBoxに渡してやれば、できそうな気がする。
ゆき
大ベテラン
会議室デビュー日: 2003/11/02
投稿数: 121
投稿日時: 2004-08-04 15:59
 ご返答ありがとうございます。
VB.NETで同じようなコードを書いてやってみたのですが、
残念ながらうまくできませんでした。
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2004-08-04 16:49
こんにちは。

RichTextBox の内容を印刷する方法というのが
こちらに記述されています。

今回行いたいことの解ではありませんが、何らかのヒントになれば。。。

かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-08-05 08:52
引用:

VB.NETで同じようなコードを書いてやってみたのですが、
残念ながらうまくできませんでした。


どのようなコードを記述して、どのようなエラー、不具合が発生したのかを詳細に記述してくれないと、更なる回答を与えることができません。
ゆき
大ベテラン
会議室デビュー日: 2003/11/02
投稿数: 121
投稿日時: 2004-08-05 09:44
おはようございます

Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(pe)

' カスタム描画コードをここに追加します。
Dim oggGraphics As Graphics
oggGraphics = Graphics.FromImage(m_image)
MyBase.OnPaint(New PaintEventArgs(oggGraphics, pe.ClipRectangle))
pe.Graphics.DrawImage(m_image, 0, 0)

End Sub

このようなコードを書いてみたのですが、
m_imageを他の他に渡して、Graphics.DrawImageメソッド等を使うと、
m_imageがNothingだというエラーメッセージになってしまいます。

VBでも印刷の方法が載っていたのでやってみました。
印刷はできたのですが(当たり前ですね)、
拡大とか縮小とかをしないといけないことを考えると、
GraphicsPathかGraphicsで使える形にしたいんです。
この印刷の方法がヒントになるのかもしれませんが、
私のクルクルパーの頭では、どうもそこまでは至らなくて・・・
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-08-05 12:37
PictureBoxで表示したいんですよね?

取り出した描画内容(m_image)をPictureBox#Imageプロパティを介して渡してやれば(もしかしたら、Invalidate()を呼んでやらないといけないかもしれない)、表示されると思うんですけどねぇ。たぶんDrawImage()を呼ぶ必要も無いと思う。

どのようにして、ほかのコントロールに渡しているのか、および例外のスタックトレースも可能な限り、提示してください。

#蛇足
#最初のMyBase.OnPaint(pe) は不要です。
ゆき
大ベテラン
会議室デビュー日: 2003/11/02
投稿数: 121
投稿日時: 2004-08-05 13:09
こんにちわ
そうです。PictureBoxです。
リッチテキストをグラフィックとして表示させたいのです。
DrawStringとかだとフォントや色の指定をしないといけないので、リッチテキストの場合かなり大変になりますし、文字の表示位置も変わってきてしまうので、困っています。

渡し方はm_imageをパブリックなプロパティにして、表示させたいPictureBoxでDrawImageしようとしています。
エラーは、
'System.ArgumentNullException' のハンドルされていない例外が system.drawing.dll で発生しました。

追加情報 : 値を Null にすることはできません。

とでるのですが、
どうもリッチテキストボックスでは、InvalidateなどをしてもOnPaintは走らないみたいです。代わりにOnInvalidatedが文字を入力したりするたびに走っているみたいです。


スキルアップ/キャリアアップ(JOB@IT)