RichTextBox があり、DrawToBitmap を実行すると、richTextBox 内のテキストはまったく描画されません。
Bitmap b = new Bitmap(rtb.Width, rtb.Height);
inputControl.DrawToBitmap(b, new Rectangle(0, 0, b.Width, b.Height));
これを修正する方法はありますか?
RichTextBox があり、DrawToBitmap を実行すると、richTextBox 内のテキストはまったく描画されません。
Bitmap b = new Bitmap(rtb.Width, rtb.Height);
inputControl.DrawToBitmap(b, new Rectangle(0, 0, b.Width, b.Height));
これを修正する方法はありますか?
これは比較的古いものですが、http://www.windows-tech.info/3/8ffaf21eed5de2d4.phpで見つけた実用的なソリューションです。
public static Bitmap RtbToBitmap(RichTextBox rtb)
{
rtb.Update(); // Ensure RTB fully painted
Bitmap bmp = new Bitmap(rtb.Width, rtb.Height);
using (Graphics gr = Graphics.FromImage(bmp))
{
gr.CopyFromScreen(rtb.PointToScreen(Point.Empty), Point.Empty, rtb.Size);
}
return bmp;
}
RichTextBox.DrawToBitmap() に関する MSDN ライブラリの記事から:
このメソッドは、このクラスには関係ありません。
ネイティブの Windows リッチエディット コントロールが WM_PRINT をサポートしていないと言うのは下品な言い方です。スクリーン ショットを撮ることもできます。Novikov が私の回答へのリンクを提供してくれました。
このスレッドは、Google で 2 番目に表示されました。あなたが望むものを正確に持っているようです。この質問の関数内でこれを使用していると思うので、メソッド引数としてフォーム要素を受け入れる? 、おそらくこのようなことをするのが最善です。
if(inputControl is RichTextBox)
{
//do specifc magic here
}
else
{
//general case
}
RichTextBox を含む Control を再帰的に確認できます
bool ContainsOrIsRichTextBox(Control inputControl)
{
if(inputControl is RichTextBox) return true;
foreach(Control control in inputControl.Controls)
{
if(ContainsOrIsRichTextBox(control)) return true;
}
return false;
}
私はこれをコンパイルしていませんが、StackOverflowException の危険を冒さずにコンパイルする方法がありますが、これで始められるはずです。