如何在 C# Windows 窗体应用程序中打印列表框列表?

问题描述 投票:0回答:2

我的代码当前遇到问题,无法在单击特定按钮时显示打印选项。

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

 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();



        }


    }
}
c# forms listbox windows-forms-designer
2个回答
0
投票

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


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
选项!

© www.soinside.com 2019 - 2024. All rights reserved.