1

前回の質問以来、C# でフォームを印刷する作業をさらに行った結果、次のコードが得られました。

    public void printToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Rectangle bounds = this.Bounds;
        Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);

        Graphics g = Graphics.FromImage(bitmap);            
        g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);             


        PrintDocument doc = new PrintDocument();
        doc.PrintPage += this.Doc_PrintPage;

        PrintDialog dlgSettings = new PrintDialog();
        dlgSettings.Document = doc;

        if (dlgSettings.ShowDialog() == DialogResult.OK)
        {
            doc.Print();
        }
    }

    private void Doc_PrintPage(object sender, PrintPageEventArgs e)
    {

        float x = e.MarginBounds.Left;
        float y = e.MarginBounds.Top;

        e.Graphics.DrawImage(bitmap);
    }

printToolStripMenuItem_Click は印刷ボタンです。ニーズに合わせてコードを編集する前に印刷ダイアログを見たので、私は近くにいることを知っています。現在、「e.Graphics.DrawImage(bitmap);」に「bitmap」というエラーが表示されています。文脈上存在しません。

この画像を印刷するには、何を変更できますか? 印刷ドキュメントを作成する前に、画面のイメージを印刷しようとしています。私は時々怠け者です:P

注: これは、印刷する必要があるフォームである form2.cs ファイル内のすべてのコードです。

ありがとう :)

4

2 に答える 2

1

でビットマップを宣言していますprintToolStripMenuItem_Clickが、で使用していDoc_PrintPageます。何らかの方法で渡す必要があります。最も簡単な方法は、インスタンス変数にすることです (つまり、メソッドではなくクラスで宣言してから、 に割り当てますprintToolStripMenuItem_Click)。

public class SomeForm
{
  private Bitmap bitmap;
  public void printToolStripMenuItem_Click(object sender, EventArgs e)
  {
    //...
    bitmap = new Bitmap(bounds.Width, bounds.Height);
    //...
  }
}

e.Graphics.DrawImageまた、呼び出しにパラメーターがありません。画像を描画する場所を指定する必要があります。たとえば、左上隅に配置したい場合は、次のようにします。

e.Graphics.DrawImage(bitmap, new Point(0,0));
于 2013-10-10T21:12:05.007 に答える
1

関数内でイベント ハンドラーを作成するには、匿名メソッドを使用する必要があります。
このようにして、クロージャーの魔法を介して、ローカル変数を読み取ることができます。

doc.PrintPage += (s, e) => {
    float x = e.MarginBounds.Left;
    float y = e.MarginBounds.Top;

    e.Graphics.DrawImage(bitmap);
};
于 2013-10-10T21:18:29.583 に答える