0

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

4

2 回答 2

1

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

于 2009-01-06T20:13:24.733 回答
1

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

当您在 IE 页面设置中按下 OK 按钮时,它将设置中写入的边距值存储为长度为 8 的字符串 (REG_SZ),剩余空间用 0 填充。

IE

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

IE

0.750000 -> 0.75

0.500000 -> 0.5

1.000000 -> 1

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

  2. 调用 WebBrowser.ShowPageSetupDialog()

  3. 如果用户按下 OK,注册表中的边距值将用 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()
}
于 2019-12-01T17:03:12.223 回答