如何从WebBrowser.ShowPageSetupDialog获取对话框结果

时间:2009-01-06 15:05:08

标签: c# .net printing webbrowser-control dialogresult

我在Visual C#(。net 2.0)应用程序中使用WebBrowser控件 现在我想添加一个显示页面设置对话框的打印按钮,然后在用户按下OK按钮时直接打印,或者在用户按下取消按钮时取消打印。
但是WebBrowser.ShowPageSetupDialog不会返回DialogResult,而只是返回void 有没有我错过的东西或任何其他方式来了解用户的行为?

2 个答案:

答案 0 :(得分:1)

WebBrowser控件的页面设置对话框设置注册表项。我过去所做的是在代码中为用户设置这些值,并且只为他们提供了打印选项。

答案 1 :(得分:1)

我遇到了同样的问题,通过观察IE Page Setup在@“ Software \ Microsoft \ Internet Explorer \ PageSetup”注册表中存储边距值的方式,能够找到一个花哨的解决方法。

在IE页面设置中按“确定”按钮时,它将存储在设置中的边距值存储为长度为8的字符串(REG_SZ),其余空间填充为0。

  

     

0.75存储为0.750000

     

1.0存储为1.000000

     

2存储为2.000000

使用WebBrowser.Print()时,它将边距值转换为浮点,因此在注册表中将0.75或0.750000作为边距值会产生相同的结果。

但是,如果将它们作为字符串进行比较,则0.75和0.750000将被视为不同。

这就是窍门:

  1. 在调用WebBrowser.ShowPageSetupDialog()之前,请删除注册表边距值中的尾随数字0。
  

     

0.750000-> 0.75

     

0.500000-> 0.5

     

1.000000-> 1

  1. 将边距值之一存储在字符串变量中

  2. 调用WebBrowser.ShowPageSetupDialog()

  3. 如果用户按“确定”,则注册表中的边距值将补0。否则,它们将按照第1点的说明进行修剪。

  4. 将注册表中的边距值与变量中存储的边距值进行比较,如果相同,则用户按“取消”,否则按“确定”。

示例:

private void ie_DocumentCompleted(object _sender, WebBrowserDocumentCompletedEventArgs e)
{
    System.Windows.Forms.WebBrowser ie = (System.Windows.Forms.WebBrowser)_sender;

    string strKey = "Software\\Microsoft\\Internet Explorer\\PageSetup";
    bool bolWritable = true;
    RegistryKey ok = Registry.CurrentUser.OpenSubKey(strKey, bolWritable);

    ok.SetValue("margin_left", 0.75, RegistryValueKind.String);

    string reg_validation = (string) ok.GetValue("margin_left");

    ie.ShowPageSetupDialog();

    if (reg_validation.Equals((string)ok.GetValue("margin_left")))
    {
        MessageBox.Show("Cancel");
    }
    else
    {
        MessageBox.Show("OK");
        ie.Print();
    }
    ok.Close()
}