Avatar billede hulla Novice
05. september 2003 - 09:04 Der er 9 kommentarer og
1 løsning

Print af elementer på winForm

Jeg bruger visual studio.net og koder i C#.

Jeg har en winapp hvor brugeren skal indtaste forskellige oplysninger og klikke på afkrydsningsfelter.

Disse oplysninger skal printes ud på en forudprintet skabelon. Alså ikke på hvidt papir!

Jeg har fået print til at virke med PrintDocument, hvor det den udskriver er en formateret tekststreng.

Det jeg gerne vil høre, er om det kan lade sig gøre at printe den slags som et image eller lign., så krydser og den slags altid står på nøjagtig samme sted.

Eller kan det gøres med x og y koordinater ?

Håber en eller anden har et godt bud
:o)
Avatar billede websmith Nybegynder
08. september 2003 - 13:20 #1
I teorien kunne du vel oprette en ny udskrift's form, og så placere din tekst mv. som labels på denne form. Disse labels kan jo placeres med x/y koordinater, men det bliver ikke nemt, da du jø skal tage højde for mængden af tekst i felterne.

Når du har fået det til at se nogenlunde ud, så kan du bare printe formen.
Avatar billede websmith Nybegynder
08. september 2003 - 13:22 #2
Alle kontroller bliver jo placeret ved at bruge:

this.TestLabel.Location = new System.Drawing.Point(8, 24);

Hvilket placerer den på 8,24 positionen

Og størrelse på samme måde:
this.TestLabel.Size = new System.Drawing.Size(96, 23);

Så hvis du er nogenlunde sikker på mængden af tekst, så kan du bruge denne metode. Hvis det er meget variabelt, så er du nødt til at beregne på størrelserne af teksten og så justere herefter.
Avatar billede hulla Novice
08. september 2003 - 15:34 #3
Jeg kender helt nøjagtig teksten og afkrydsningsplaceringer på formen.

Hvis jeg nu gerne vil oprette en form, udfylde den og udskrive den uden brugeren ser noget til det, kan det så lade sig gøre ?
Avatar billede websmith Nybegynder
09. september 2003 - 08:44 #4
Tjoeh, du kan jo bruge ovenstående til at få din tekst placeret.

Dvs. du opretter din udskrifts form med labels der hvor din tekst mv skal være. Når du så vil udskrive et dokument, så laver du en ny instans af den form og sætter .Text variablen til at indeholde den tekst som de forskellige labels skal have.

Mht at skrive ud, så skal du bruge et object af typen:
System.Drawing.Printing.PrintDocument

Som har en metode som hedder Print()

Denne kontrol kan du tilføje din udskrifts form, og kalde PRint() når dokumentet er loaded, og så derefter Close for at lukke formen igen
Avatar billede websmith Nybegynder
09. september 2003 - 08:46 #5
Du kan kigge på dette eksempel på hvordan man kan gøre.

public class PrintingExample : System.Windows.Forms.Form
{
    private System.ComponentModel.Container components;
    private System.Windows.Forms.Button printButton;
    private Font printFont;
    private StreamReader streamToPrint;

  public PrintingExample() : base()
  {
      // The Windows Forms Designer requires the following call.
      InitializeComponent();
  }

  // The Click event is raised when the user clicks the Print button.
  private void printButton_Click(object sender, EventArgs e)
  {
      try
      {
          streamToPrint = new StreamReader
            ("C:\\My Documents\\MyFile.txt");
          try
          {
            printFont = new Font("Arial", 10);
            PrintDocument pd = new PrintDocument();
            pd.PrintPage += new PrintPageEventHandler
                (this.pd_PrintPage);
            pd.Print();
          } 
          finally
          {
            streamToPrint.Close();
          }
      } 
      catch(Exception ex)
      {
          MessageBox.Show(ex.Message);
      }
  }

  // The PrintPage event is raised for each page to be printed.
  private void pd_PrintPage(object sender, PrintPageEventArgs ev)
  {
      float linesPerPage = 0;
      float yPos = 0;
      int count = 0;
      float leftMargin = ev.MarginBounds.Left;
      float topMargin = ev.MarginBounds.Top;
      string line = null;

      // Calculate the number of lines per page.
      linesPerPage = ev.MarginBounds.Height /
        printFont.GetHeight(ev.Graphics);

      // Print each line of the file.
      while(count < linesPerPage &&
        ((line=streamToPrint.ReadLine()) != null))
      {
        yPos = topMargin + (count *
            printFont.GetHeight(ev.Graphics));
        ev.Graphics.DrawString(line, printFont, Brushes.Black,
            leftMargin, yPos, new StringFormat());
        count++;
      }

      // If more lines exist, print another page.
      if(line != null)
        ev.HasMorePages = true;
      else
        ev.HasMorePages = false;
  }


  // The Windows Forms Designer requires the following procedure.
  private void InitializeComponent()
  {
      this.components = new System.ComponentModel.Container();
      this.printButton = new System.Windows.Forms.Button();

      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(504, 381);
      this.Text = "Print Example";

      printButton.ImageAlign =
        System.Drawing.ContentAlignment.MiddleLeft;
      printButton.Location = new System.Drawing.Point(32, 110);
      printButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
      printButton.TabIndex = 0;
      printButton.Text = "Print the file.";
      printButton.Size = new System.Drawing.Size(136, 40);
      printButton.Click += new System.EventHandler(printButton_Click);

      this.Controls.Add(printButton);
  }

  // This is the main entry point for the application.
  public static void Main(string[] args)
  {
      Application.Run(new PrintingExample());
  }
}
Avatar billede websmith Nybegynder
09. september 2003 - 08:51 #6
Godt nok bruger dette eksempel en fil som den læser fra disk, men basalt set kan du bare placere din tekst på samme måde som de enkelte linier fra filen bliver placeret på, dvs.

DrawString(Tekst, Font, x, y).

Prøv at kigge på dokumentationen under

System.Drawing.Graphics
Avatar billede hulla Novice
09. september 2003 - 10:27 #7
Jeg har nu opbygget en form nøjagtig som jeg gerne vil have den skrevet ud. Men hvordan får jeg System.Drawing.Printing.PrintDocument til at tage min form som det document der skal udskrives ?
Avatar billede hulla Novice
09. september 2003 - 15:36 #8
jeg har nu fået det til at virke med din DrawString,..alletiders og mange tak for hjælpen :o)

Nu jeg har dig, så ved du vel ikke en lille smule om PaperSize i C# ?
Jeg vil gerne have at den sender en papersize på ca. 10 cm og ikke i A4 størrelse.. ??
Avatar billede websmith Nybegynder
12. september 2003 - 08:47 #9
Hvad med PrintDocument.PageSettings.PaperSize ??
Avatar billede hulla Novice
15. september 2003 - 09:38 #10
tak for hjælpen, jeg fandt ud af at lave en custom papersize, så du havde sådan set ret..

Du skal nok få pointene men jeg kunne vel ikke trække en sidste hjælp ud af dig?
Kan man istedet for at udskrive en side, nøjes med at udskrive en linje ???
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester