2017-09-05 3 views
-1

Je reçois quelques erreurs de compilation avec mon new Rectangle() - J'ai un formulaire Windows avec quelques zones de texte pour la saisie par l'utilisateur, et un bouton pour imprimer l'aperçu. Lorsque le bouton est pressé pour imprimer l'aperçu, je veux que le formulaire actuel de fenêtres s'affiche sur la page. J'essaie de coder les valeurs des zones de texte pour les afficher en haut à gauche directement au-dessus d'une image imprimée dans la moitié inférieure de la page. C'est la syntaxe que j'ai, mais je reçois plusieurs erreurs de compilation. Qu'ai-je mis en place de manière incorrecte? J'ai envie d'écrire du texte à partir d'un formulaire de gain pour un document imprimé devrait être assez simple, mais j'échoue!Impression de texte sur papier à partir de zones de texte

private void btnPreview_Click(object sender, EventArgs e) 
{ 
    PrintPreviewDialog PrintPreviewDlg = new PrintPreviewDialog(); 

    PrintPreviewDlg.ClientSize = new System.Drawing.Size(400, 300); 
    PrintPreviewDlg.Location = new System.Drawing.Point(29, 29); 
    PrintPreviewDlg.Name = "PrintPreviewDlg"; 

    PrintPreviewDlg.MinimumSize = new System.Drawing.Size(375, 250); 

    PrintPreviewDlg.WindowState = FormWindowState.Maximized; 
    PrintPreviewDlg.UseAntiAlias = true; 

    dynamic printData = CreatePrintDocument(); 
    printData.DefaultPageSettings.Landscape = true; 
    PrintPreviewDlg.Document = printData; 
    PrintPreviewDlg.ShowDialog(); 
} 

printData CreatePrintDocument() 
{ 
    printData document = new printData(); 
    document.SetParentCtrl(this); 
    document.PrintData.txtAssignmentName = MainInstance.txtAssignmentName.Text; 
    document.PrintData.txtAssignmentNumber = MainInstance.txtAssignmentNumber.Text; 
    document.PrintData.txtPreparedBy = MainInstance.txtPreparedBy.Text; 
    document.PrintData.txtAssignmentSection = MainInstance.txtAssignmentSection.Text; 
    document.PrintData.DocumentName = "Testing Print Functionality"; 

    return document; 
} 


class printData : PrintDocument 
{ 
    Size m_SubHeaderTextFieldSize; 
    int m_NormalRowHeight = 0; 
    class DataToPrintData 
    { 
     public string txtAssignmentName, txtAssignmentNumber, txtPreparedBy, txtAssignmentSection; 
    } 
    protected override void OnPrintPage(PrintPageEventArgs e) 
    { 
    //More print specs here 
    int LeftSubHeadingWidth = 200; 
    m_SubHeaderTextFieldSize = new Size(LeftSubHeadingWidth, m_NormalRowHeight); 
    string printData = "Project Name: " + projectNumberTitle + System.Environment.NewLine + 
       "Prepared By: " + txtPreparedBy + System.Environment.NewLine + 
       "Assignment Section: " + txtAssignmentSection + System.Environment.NewLine; 

    e.Graphics.DrawString(e, new Font("Times New Roman", 12), new SolidBrush(Color.Black), new RectangleF(0,0, m_SubHeaderTextFieldSize, StringAlignment.Near); 
    } 
} 
+2

Désolé, "plusieurs erreurs du compilateur" ne communique pas beaucoup. Pouvez-vous nous dire * quelles * erreurs, et * quelles lignes * vous les obtenez? –

Répondre

1

Essayez ce code:

var format = new StringFormat {Alignment = StringAlignment.Near}; 
e.Graphics.DrawString(
    printData, 
    new Font("Times New Roman", 12), 
    new SolidBrush(Color.Black), 
    new RectangleF(new PointF(0, 0), m_SubHeaderTextFieldSize), 
    format); 
+0

-> serait-il possible d'étendre la largeur du rectangle que j'ajoute? Si oui, comment ferais-je cela? –

+0

@SmithStanley vous pouvez changer votre champ 'm_SubHeaderTextFieldSize'. Lisez [this] (https://msdn.microsoft.com/en-us/library/ab924f6y (v = vs.110) .aspx) msdn article. En passant, il devrait avoir le type 'SizeF' (pas un' Size' comme dans votre question). Cependant, cela ressemble à une autre question –

0

new RectangleF(0,0, m_SubHeaderTextFieldSize, StringAlignment.Near) Il semble que vous fournissiez des paramètres erronés au constructeur de RectangleF. Il y a 2 Surcharges électriques - premier accepte un PointF et une taille, vous pouvez l'appeler comme ceci:
new RectangleF(new PointF(0f,0f), m_SubHeaderTextFieldSize)
autres un 4 points, l'appellent comme ceci:
new RectangleF(0f,0f, m_SubHeaderTextFieldSize.Width, m_SubHeaderTextFieldSize.Height)
toute façon, il ressemble StringAlignment.Near concerne e.Graphics.DrawString fonction. ..