3

RichTextBox があり、DrawToBitmap を実行すると、richTextBox 内のテキストはまったく描画されません。

Bitmap b = new Bitmap(rtb.Width, rtb.Height);
inputControl.DrawToBitmap(b, new Rectangle(0, 0, b.Width, b.Height));

これを修正する方法はありますか?

4

6 に答える 6

5

これは比較的古いものですが、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;
}
于 2014-06-10T23:23:53.767 に答える
4

RichTextBox.DrawToBitmap() に関する MSDN ライブラリの記事から:

このメソッドは、このクラスには関係ありません。

ネイティブの Windows リッチエディット コントロールが WM_PRINT をサポートしていないと言うのは下品な言い方です。スクリーン ショットを撮ることもできます。Novikov が私の回答へのリンクを提供してくれました。

于 2011-02-11T21:38:38.950 に答える
4

このスレッドは、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 の危険を冒さずにコンパイルする方法がありますが、これで始められるはずです。

于 2011-02-11T21:34:51.210 に答える