3 Stimmen

Wert kann nicht Null sein Ausnahme in Windows Formular C#

Ich arbeite an einem Windows-Formular, um ein Mitarbeiterkartenlayout zu erstellen. Zusätzlich dazu habe ich einen Button mit dem Namen "Drucken" hinzugefügt, der den Inhaltsbereich des Panels druckt. Wenn ich den Code ausführe, zeigt er einen Fehler an, wenn das Formular geladen wird: Fehler im Formular

Hier ist mein Code:

namespace SimpleReport
{
public partial class EmployeeCardForm : Form
{
    //Deklariere folgende Objektvariablen
    PrintDocument printdoc1 = new PrintDocument();
    PrintPreviewDialog previewdlg = new PrintPreviewDialog();
    Panel pannel = null;

    public EmployeeCardForm()
    {
        InitializeComponent();
        //Deklariere den Ereignishandler für den Druck im Konstruktor
        printdoc1.PrintPage += new PrintPageEventHandler(printdoc1_PrintPage);
    }

    Bitmap MemoryImage;
    public void GetPrintArea(Panel pnl)
    {
        MemoryImage = new Bitmap(pnl.Width, pnl.Height);
        Rectangle rect = new Rectangle(0, 0, pnl.Width, pnl.Height);
        pnl.DrawToBitmap(MemoryImage, new Rectangle(0, 0, pnl.Width, pnl.Height));
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.DrawImage(MemoryImage, 0, 0);
        base.OnPaint(e);
    }
    void printdoc1_PrintPage(object sender, PrintPageEventArgs e)
    {
        Rectangle pagearea = e.PageBounds;
        e.Graphics.DrawImage(MemoryImage, (pagearea.Width / 2) - (this.panel1.Width / 2), this.panel1.Location.Y);
    }

    public void Print(Panel pnl)
    {
        pannel = pnl;
        GetPrintArea(pnl);
        previewdlg.Document = printdoc1;
        previewdlg.ShowDialog();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Print(this.panel1);
    }
  }
}

Als ich den Code debuggte, erfuhr ich, dass er bei der ersten Zeile des OnPaint-Ereignisses abstürzt. Bitte helfen Sie mir.

3voto

Lloyd Powell Punkte 17593

MemoryImage ist null, bevor GetPrintArea() aufgerufen wurde.

Versuchen Sie dies:

protected override void OnPaint(PaintEventArgs e)
{
    if (MemoryImage != null)
    {
        e.Graphics.DrawImage(MemoryImage, 0, 0);
    }
    base.OnPaint(e);
}

Das gilt nur, wenn Sie es nicht zeichnen möchten, wenn es null ist. Weil es anfangs null ist und Sie es dann in GetPrintArea() setzen. Je nach Situation könnten Sie GetPrintArea() aufrufen, anstatt die Null-Prüfung durchzuführen, oder Sie könnten MemoryImage sofort initialisieren. Es hängt alles davon ab, wie Sie es arbeiten lassen möchten.

0voto

riffnl Punkte 2920

Sie haben Ihr MemoryImage nie festgelegt. In Ihrem printpage-Ereignis sollten Sie vor dem Aufruf von DrawImage GetPrintArea(pnl) hinzufügen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X