另一天,另一个奇怪的 InfoPath 问题......
因此,我正在按照这些教程在 C# 中构建自定义 ActiveX 控件 - mhttp://blogs.msdn.com/b/infopath/archive/2006/12/18/creating-complex-infopath-controls-in-c- sharp.aspx 和http://blogs.msdn.com/b/infopath/archive/2005/04/15/creating-an-infopath-custom-control-using-c-and-net.aspx。一般来说,事情很简单,我有可以返回简单值、xml 等的工作控件。
但是,在 msdn 帖子中断言的一件事是,InfoPath 将在视图更新时反复销毁和重新实例化控件 - 因此您无法将状态存储在控件中。然后,让我惊讶的是,在 InfoPath 2010 中,我绝对可以在控件中存储状态(字段、属性、.NET 控件),并在提交表单时将其保存到 xml。奇怪的事件,在控件构造函数中放置 MessageBox.Show() 表示控件正在重复重新实例化,但用户只能访问一个版本。我对此感到有些困扰,因为我不确定为什么要实例化控件的额外副本,如果控件变得复杂,这可能会导致严重的性能问题
所以,现在我在 InfoPath 2007 中试用它,我发现每次数据更改时 ActiveX 控件确实被销毁并重新实例化(销毁所有状态)。这基本上意味着所有状态都需要存储在某个地方(可能是 xml 表单),以便在刷新时重新填充控件。
这显然是 InfoPath 2007/2010 之间的一个相当大的区别 - 但我找不到该现象的文档或任何其他提及。上面引用的文章非常古老,因此正确地引用了 2007 年的行为。如果有人能对此有所了解,我将不胜感激!