我正在使用C#中的WebBrowser控件。我在表单中使用WebBrowser,并在此WebBrowser中插入一些HTML和CSS。效果很好。
我想直接从这个WebBrowser打印并检查打印状态。如果完成,应用程序将自动关闭。我搜索了类似的内容:WebBrowser.Print() wait until complete. .NET。
它可以工作,但是当我处于调试模式时,我的代码永远不会经历“DocumentCompleted”事件。所以我尝试在表单的Shown
事件中打印。这是代码:
using System.Reflection;
using System.Threading;
using SHDocVw;
private void PrintFacture_Load(object sender, EventArgs e)
{
string content = "Some HTML+CSS";
webBrowser1.Navigate("about:blank");
if (webBrowser1.Document != null)
{
webBrowser1.Document.Write(string.Empty);
}
webBrowser1.Margin = new System.Windows.Forms.Padding(0, 0, 0, 0);
webBrowser1.Document.Write(content);
}
private void PrintFacture_Shown(object sender, EventArgs e)
{
string keyName = @"Software\Microsoft\Internet Explorer\PageSetup";
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName, true))
{
if (key != null)
{
string old_footer = key.GetValue("footer").ToString();
string old_header = key.GetValue("header").ToString();
key.SetValue("footer", "");
key.SetValue("header", "");
var wbax = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
wbax.PrintTemplateTeardown += new DWebBrowserEvents2_PrintTemplateTeardownEventHandler(PrintDone);
webBrowser1.Print();
key.SetValue("footer", old_footer);
key.SetValue("header", old_header);
}
}
}
private void PrintDone(object sender)
{
var wbax = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
wbax.PrintTemplateTeardown -= new DWebBrowserEvents2_PrintTemplateTeardownEventHandler(PrintDone);
Application.Exit();
}
我的问题是为什么我的代码从未收到过WebBrowser事件“DocumentCompleted”?
有没有更好的解决方案呢?我认为在表格中展示的事件不是最好的主意。有什么好主意吗?