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

C# 如何从WebBrowser.ShowPageSetupDialog获取对话框结果,c#,.net,printing,webbrowser-control,dialogresult,C#,.net,Printing,Webbrowser Control,Dialogresult,我正在Visual C#(.net 2.0)应用程序中使用WebBrowser控件。 现在,我想添加一个打印按钮,显示页面设置对话框,然后在用户按下OK按钮时直接打印,或者在用户按下cancel按钮时取消打印。 但是WebBrowser.ShowPageSetupDialog不返回DialogResult,只返回void。 是否有我遗漏的内容或了解用户操作的其他方式?WebBrowser控件的页面设置对话框设置注册表项。我过去所做的是在代码中为用户设置这些值,只给他们打印选项。我也有同样的问题,

我正在Visual C#(.net 2.0)应用程序中使用WebBrowser控件。
现在,我想添加一个打印按钮,显示页面设置对话框,然后在用户按下OK按钮时直接打印,或者在用户按下cancel按钮时取消打印。
但是WebBrowser.ShowPageSetupDialog不返回DialogResult,只返回void。

是否有我遗漏的内容或了解用户操作的其他方式?

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

我也有同样的问题,通过观察IE页面设置在@“Software\Microsoft\Internet Explorer\PageSetup”注册表中存储边距值的方式,我找到了一个巧妙的解决方法

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

i、 e

0.75存储为0.750000

1.0存储为1.000000

2存储为2.000000

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

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

下面是诀窍:

  • 在调用WebBrowser.ShowPageSetupDialog()之前,请删除注册表边距值中的尾随0
  • i、 e

    0.750000->0.75

    0.500000->0.5

    1.000000->1

  • 在字符串变量中存储一个边距值

  • 调用WebBrowser.ShowPageSetupDialog()

  • 如果用户按OK,注册表中的边距值将用0填充回来。否则,它们将保持第1点中提到的修剪

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

  • 例如:

    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()
    }