Я использую элемент управления WebBrowser в своем приложении Visual C# (.net 2.0). Теперь я хотел бы добавить кнопку печати, которая показывает диалоговое окно настройки страницы, а затем напрямую печатает, когда пользователь нажимает кнопку OK, или отменяет печать, когда пользователь нажимает кнопку отмены. Однако WebBrowser.ShowPageSetupDialog не возвращает DialogResult, а просто недействителен. Есть ли что-то, что я пропустил, или какой-либо другой способ узнать действия пользователей?





Диалоговое окно настройки страницы вне элемента управления WebBrowser устанавливает записи реестра. Раньше я устанавливал эти значения для пользователя в коде и давал им только возможность печати.
У меня была та же проблема, я смог найти хитрый обходной путь, наблюдая, как программа IE Page Setup сохраняет значения полей в реестре @ "Software \ Microsoft \ Internet Explorer \ PageSetup".
Когда вы нажимаете кнопку OK в IE Page Setup, значения полей, записанные в настройке, сохраняются в виде строки (REG_SZ) длиной 8, а оставшееся пространство заполняется нулями.
i.e.
0.75 is stored as 0.750000
1.0 is stored as 1.000000
2 is stored as 2.000000
Когда вы используете WebBrowser.Print (), он преобразует значения полей в числа с плавающей запятой, поэтому наличие 0,75 или 0,750000 в качестве значений полей в реестре дает тот же результат.
Однако, если вы сравните их как строки, 0,75 и 0,750000 будут считаться разными.
А вот и хитрость:
i.e.
0.750000 -> 0.75
0.500000 -> 0.5
1.000000 -> 1
Сохраните одно из значений маржи внутри строковой переменной
Вызов WebBrowser.ShowPageSetupDialog ()
Если пользователь нажмет OK, значения полей в реестре будут дополнены нулями. В противном случае они останутся обрезанными, как указано в пункте 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()
}