【发布时间】:2012-11-02 05:35:42
【问题描述】:
有什么方法可以查询 IE 插件(Adobe Reader)的状态吗?我有一种情况,我们通过标签页托管的嵌入式浏览器(基于我的研究的首选模式)向用户呈现许多多页报告。当用户离开报告时,通常是为了修改数据,他们返回到重新初始化的 Adobe Reader。这意味着它们的位置已丢失,扩展的书签节点已折叠。
下面是一个简化的代码 sn-p,我希望它能够充分表达我的问题的本质。
Public partial class ReportView : UserControl
{
private System.Windows.Forms.WebBrowser webBrowser;
private MyNamespace.ReportGenerator reportGen;
private String currentPDFtempPath;
public ReportView()
{
InitializeComponent();
this.Leave += (o, e) => { /*how can I save current place in pdf?*/ };
this.Enter += (o, e) => { /*return user last place in large pdf*/ };
}
public void ViewReport(string reportName)
{
currentPDFtempPath = reportGen.GetReport(reportName);
webBrowser.Navigate(currentPDFtempPath);
}
private void RefreshReport()
{
webBrowser.Navigate(currentPDFtempPath); /*reinitializes Adobe Reader*/
}
}
public class ReportController
{
private DataModel model;
private ReportView view;
ReportController(DataModel m, ReportView v)
{
this.model = m;
this.view = v;
model.Changed += (o, e) => { view.RefreshReport(); }
}
}
【问题讨论】:
-
很难看出这段代码的意义。只需删除 Enter 事件处理程序。
-
对模型数据进行更改时需要重新生成报告。真实的代码通过控制器以不同的方式处理它,但我认为这是表达我想要完成的本质的最简洁的方式。
-
只需调用 ViewReport 即可显示另一份报告。 Enter 事件不会修改模型数据,因此应该不重新生成报告。
-
我根据您的评论修改了代码以提供更准确的表示。有一个控制器类,最初为了简洁而省略,它修改模型并更新视图。
标签: c# winforms browser .net-2.0