0

基本的に、プログラムでリストを にロードし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();

}
4

1 に答える 1

0

forWeb ブラウザー コントロールでよくある間違いは、ここにあるように、従来のループで使用しようとすることです。

WebBrowser ページの読み込みは非同期アクションです。DocumentCompleted イベントがあるのはそのためです。ループでこれを考慮する必要があります。PrintDocument従来の for ループを使用する代わりに、DocumentCompleted (例: ) ハンドラに次の場所をロードさせます。

于 2013-01-23T23:27:18.780 に答える