使用WebBrowser在列表框中打印文档

时间:2013-01-23 19:21:48

标签: c# .net printing webbrowser-control

基本上,我希望我的程序将列表加载到ListBox,并允许用户单击“打印”,将WebBrowser导航到列表中的每个页面,打印它们全部单独出来。

然而,它只打印了2页(在我的例子中,我在列表框中有4页),然后停止,没有完成循环。 (很可能是由于WebBrowser控制仍然很忙)

我觉得我在这里犯了一个简单的错误。任何有关造成这种情况的见解都非常感谢!

我的代码:

private void Form1_Load(object sender, EventArgs e)
{
    DirSearch(Application.StartupPath);
}

void DirSearch(string sDir)
{
    try
    {
        foreach (string d in Directory.GetDirectories(sDir))
        {
            foreach (string f in Directory.GetFiles(d).Select(Path.GetFileName))
            {
                listBox1.Items.Add(f);
            }
            DirSearch(d);
        }
    }
    catch (System.Exception excpt)
    {
        Console.WriteLine(excpt.Message);
    }
}

private void button1_Click(object sender, EventArgs e)
{
    WebBrowser webBrowserForPrinting = new WebBrowser();
    webBrowserForPrinting.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(PrintDocument);

    foreach (string s in listBox1.Items)
    {
        try
        {
            webBrowserForPrinting.Url = new Uri(Application.StartupPath + "\\COAForms\\" + s);
        }
        catch (Exception)
        {
        }
    }
}

private void PrintDocument(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // Print the document now that it is fully loaded.
    ((WebBrowser)sender).Print();

}

1 个答案:

答案 0 :(得分:0)

Web浏览器控件的一个常见错误是尝试在传统的for循环中使用它,就像您在这里一样。

WebBrowser页面加载是一个异步操作。这就是DocumentCompleted事件的原因。您需要在循环中考虑到这一点。让DocumentCompleted(例如。PrintDocument)处理程序加载下一个位置,而不是使用传统的for循环。