如何在c#windows form app中打印列表框列表?

时间:2016-02-07 00:23:08

标签: c# forms listbox windows-forms-designer

我的代码目前在点击特定按钮时显示打印选项方面存在问题。

我正在制作一个提醒程序,只是在试验。还想了解向我的程序添加每日通知系统的最有效方法

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Mail;
using System.IO;
using System.Drawing.Printing;
using System.Security;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
namespace simpleapp
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Add("Reminder: " + textBox1.Text);


        }
        private void input_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
            {
                listBox1.Items.Add("Reminder: " + textBox1.Text  );
            }

        } 

        private void button2_Click(object sender, EventArgs e)
        {
            for (int rmd = listBox1.SelectedIndices.Count - 1; rmd >= 0; rmd--)
            {
                listBox1.Items.RemoveAt(listBox1.SelectedIndices[rmd]);

            }

        }

        private void Form1_Load(object sender, EventArgs e)
        {


            listBox1.SelectionMode = SelectionMode.MultiExtended;

        }

        private void button6_Click(object sender, EventArgs e)
        {
            FAQ faqs = new FAQ();
            faqs.Show();

        }

        // When the Button is Clicked the List is saved in a ".txt file format for the user to view later 
        private void button3_Click(object sender, EventArgs e)
        {
            var Savingfileas = new SaveFileDialog();
            Savingfileas.Filter = "Text (*.txt)|*.txt ";
            if (Savingfileas.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                using (var Reminder = new StreamWriter(Savingfileas.FileName, false))
                    foreach (var item in listBox1.Items)
                        Reminder.Write(item.ToString() + Environment.NewLine);
                MessageBox.Show("File has been successfully saved"+ '\n' + "Thank you for using the Remindr program");
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {

        }

        private void button5_Click(object sender, EventArgs e)
        {
            Email_Client emc = new Email_Client();
            emc.Show();



        }


    }
}

2 个答案:

答案 0 :(得分:0)

您有几个选择。一种是以图形方式布局打印文档并在使用x和y坐标在文本框中绘制文本时迭代列表框。更好的方法是将列表框项目放入数据集并使用它来生成报告。您是否将这些项目存储在数据库中以供检索? Here's a link应该可以帮助您入门。该教程在VB.Net中,但只有少量代码,并且应该很容易使用C#代码重复。

答案 1 :(得分:0)

这是打印ListBox的绝对最小的例子。

假设您的ListBox包含字符串并显示PrintPreviewDialog;它将页面单位设置为mm,选择一个你觉得舒服的单位..!

当然你可以选择一种或多种不同的字体等。

    private PrintDocument document =   new PrintDocument();

    private void printButton_Click(object sender, EventArgs e)
    {
        PrintPreviewDialog ppd = new PrintPreviewDialog();
        ppd.Document = document;
        ppd.Document.DocumentName = "TESTING";
        document.PrintPage += document_PrintPage;
        ppd.ShowDialog();
    }

    void document_PrintPage(object sender, PrintPageEventArgs e)
    {
        e.Graphics.PageUnit = GraphicsUnit.Millimeter;
        int leading = 5;
        int leftMargin = 25;
        int topMargin = 10;

        // a few simple formatting options..
        StringFormat FmtRight = new StringFormat() { Alignment = StringAlignment.Far};
        StringFormat FmtLeft = new StringFormat() { Alignment = StringAlignment.Near};
        StringFormat FmtCenter = new StringFormat() { Alignment = StringAlignment.Near};

        StringFormat fmt = FmtRight;

        using (Font font = new Font( "Arial Narrow", 12f))
        {
        SizeF sz = e.Graphics.MeasureString("_|", Font);
        float h = sz.Height + leading;

        for (int i = 0; i < listBox1.Items.Count; i++)
            e.Graphics.DrawString(listBox1.Items[i].ToString(), font , Brushes.Black, 
                                  leftMargin, topMargin + h * i, fmt);
        }
    }

当用户在对话框中单击打印机符号时,将触发实际打印。

请注意,还有更多StringFormat选项!