C# 按出现顺序打印列表框项目

C# 按出现顺序打印列表框项目,c#,printing,C#,Printing,我有一个应用程序,我已经建立,只是一种打印应用程序。 首先我填充ListBox并格式化它,然后转到c:\somefolder 在一些文件夹中是pdf文件,它会在列表框中查看是否有与列表框中的项目匹配的文件名,并将其发送到默认打印机。一切都很正常,但假设我有JohnDoe.pdf、ShahRukh.pdf、Vijay.pdf 我如何才能让它发送文件的顺序,现在它的工作很好,但我想能够打印==>JohnDoe.pdf第一,然后ShahRukh.pdf等等。请如果你有任何想法,备用是非常欢迎的。 提前

我有一个应用程序,我已经建立,只是一种打印应用程序。 首先我填充ListBox并格式化它,然后转到c:\somefolder 在一些文件夹中是pdf文件,它会在列表框中查看是否有与列表框中的项目匹配的文件名,并将其发送到默认打印机。一切都很正常,但假设我有JohnDoe.pdf、ShahRukh.pdf、Vijay.pdf 我如何才能让它发送文件的顺序,现在它的工作很好,但我想能够打印==>JohnDoe.pdf第一,然后ShahRukh.pdf等等。请如果你有任何想法,备用是非常欢迎的。 提前谢谢。这就是我现在拥有的,它工作得很好,但打印所有匹配的项目,但随机。我希望它响应或打印匹配的发生顺序从上到下

public class Pdf
{
    public static Boolean PrintPDFs(string pdfFileName)
    {
        try
        {
            ProcessStartInfo stackOverflowHelp = new ProcessStartInfo();
            stackOverflowHelp.Verb = "print";
            stackOverflowHelp.FileName = pdfFileName;
            stackOverflowHelp.CreateNoWindow = true;
            stackOverflowHelp.WindowStyle = ProcessWindowStyle.Hidden;

            Process gamingBoy = new Process();
            gamingBoy.StartInfo = stackOverflowHelp;
            gamingBoy.Start();
            gamingBoy.WaitForInputIdle();

            if (gamingBoy.HasExited == false)
            {
                gamingBoy.WaitForExit(20000);
                //return true;
            }
            //  System.Threading.Thread.Sleep(1000);
            gamingBoy.EnableRaisingEvents = true;
            gamingBoy.Close();
            //  return true;
            //proc.Close();
            //KillAdobe("AcroRd32");
            return true;
        }
        catch
        {
            return false;
        }
    }

private void button2_Click(object sender, EventArgs e)
{
    string dir = @"C:\slim\slimyyyy";//
    if (Directory.Exists(dir))//If a directory defined above exists then do the followings
    {
        string[] pdf_Files = Directory.GetFiles(dir);
        if (pdf_Files.Length > 0)
        {
            foreach (string file in pdf_Files) 
            {
                string fileName = Path.GetFileName(file);
                foreach (object item in listBox1.Items)
                {
                    if (fileName == line.ToString())
                    {
                        Pdf.PrintPDFs((file));
                    }
                }
            }
        }
    }
}

只需颠倒foreach循环的顺序:


简单的答案是改变循环的顺序。也就是说,将循环更改为:

foreach (var item in listBox1.Items)
{
    var fname = item.ToString();
    if (pdf_files.Contains(fname))
    {
        Pdf.PrintPDFs(fname);
    }
}

H、 我感谢Jim在实现代码时没有发生。我显示的代码应该按照文件在列表框中的显示顺序打印文件。如果这不是您想要的行为,那么您需要编辑您的问题,并更清楚地解释列表框按顺序包含的内容、文件列表按顺序包含的内容、您期望的输出以及输出的实际内容。如果您遇到错误,请准确地告诉我们错误消息的内容,以及它发生在哪一行。这正是我想要Jim的,但可能是我在实现它时出错了。嘿,Stan,您的代码在运行应用程序的前两次运行正常,但在第三次之后,它会再次随机打印,更重要的是,它开始从下到上打印,至少有一个订单,如果我只是我可以让它永久,不在乎它是从上到下还是从下到上,只要是其中一个并且是永久的
foreach (var item in listBox1.Items)
{
    var fname = item.ToString();
    if (pdf_files.Contains(fname))
    {
        Pdf.PrintPDFs(fname);
    }
}