执行组件代码之前或之后Form_Load的事件。净它?
-
20-09-2019 - |
题
我有一个组件,是在冲突与另一个组件,处理一些内部翻译。
会发生什么情况是,业务的逻辑部件得到执行,然后翻译系统的执行,这拾起案文现在已存在的形式,并试图把他们。
问题是,该案文现在包含了类似的数字,日期,的数据库相关的文本,等等。但在此之前的商业逻辑的是执行,这些控制是空白或含虚拟的文本制备供翻译。
我想知道我怎么可以有一个组件,我在下降的一种形式执行其在特定时间在寿命期间的形式。
例如,如果我删除有问题的代码的商业逻辑部件,因此,它没有做任何事情在建设,然后翻译工作,并且如果我然后打电话的方法我搬这些代码,从Form_Load,这也是工作得很好。
所以我想知道,是否有办法对我来说,从一个组成(即。后裔 组件, 不觉得控制),执行代码之前或之后Form_Load,或者至少是之后的所有其他组成和控制已经建立?
它不会出现任何链接,从内部分回的形式,所以我要挂钩到负荷的事件似乎并不可能。
或者我叫了错误的树吗?
解决方案
它不清楚我为什么你不能只是解决这一明确地呼吁组件的方法从形式载的事件的处理程序。
做一个分意识到形式上的其它被丢弃是可能的。设计者可以哄初始化财产的组件形式的实例。这是一种技术用于通过ErrorProvider例如,它描绘的错误标的形式。这可以扩展到我们的组件订阅的形式,负载的事件。这里是一个例子:
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Windows.Forms;
namespace WindowsFormsApplication1 {
public partial class Component1 : Component {
public Component1() {
InitializeComponent();
}
public Component1(IContainer container) {
container.Add(this);
InitializeComponent();
}
[Browsable(false)]
public ContainerControl Host {
get { return mHost; }
set {
if (mHost == null && value as Form != null && !DesignMode) {
(value as Form).Load += Initialize;
}
mHost = value;
}
}
private ContainerControl mHost;
public override ISite Site {
set {
base.Site = value;
if (value != null) {
// Assign Host at design time
IDesignerHost service = value.GetService(typeof(IDesignerHost)) as IDesignerHost;
if (service != null) {
IComponent rootComponent = service.RootComponent;
this.Host = rootComponent as ContainerControl;
}
}
}
}
private void Initialize(object sender, EventArgs e) {
Console.WriteLine("initializing...");
}
}
}
不隶属于 StackOverflow