添加Load事件的WinForms控制,就像Form类

有没有办法,我可以得到一个Load事件System.Windows.Forms.Control的,就像System.Windows.Forms.Form.Load?

我想运行一些初始化代码控制首先显示之前。

此外,这将是很好能够为System.Windows.Forms.ToolStripStatusLabel做同样这实际上不是一个控制,但就像之一。

理想情况下,我可以这样做:control.OnLoad(()=> {DoSomething的位置;});

其中的OnLoad是将运行参数操作时,“控制”,“加载”一个扩展方法。

谢谢!

--------------解决方案-------------

Form.Load事件被称为由OnLoad这是从所调用方法OnCreateControl属于方法Control类。 所以对于形式调用顺序是以下几点:

OnCreateControl start
OnLoad start
Form Load event call
OnLoad finish
OnCreateControl finish

我猜你可以重写OnCreateControl为您的组件,并添加您的优化代码存在。

希望这可以帮助,关心。

对于控制您可以覆盖任何OnControlCreated或OnHandleCreated。 后者可以发射多次如果有必要重新创建控制窗口。 一定要使用它,如果你的代码影响了窗口本身。 换句话说,如果你做任何事情需要Handle属性。

很少有适合的选择了ToolStripItem的派生的控件。 我建议你​​重写SetVisibleCore()或OnAvailableChanged()或AvailableChanged事件。 它们运行时的ToolStripItem的Visible属性发生变化。 当心,它可能会触发多次,保持一个布尔字段,跟踪你的初始化代码已经运行。

最后但并非最不重要的,一定要只做任何这一点,如果你的代码实际上要求要创建的控制。 的初始化代码绝大多数可以在构造函数中。 你只需要一个Load事件,如果你的代码依赖于实际的位置控制和尺寸。 这可能是不同于设计师值,如果形式重新调整自身由于目标机器上的不同的系统字体或视频DPI设置。

我需要这样一个解决方案的TabPage一个范围内TabControl我想出了使用Paint事件处理程序。唯一的东西。 我添加的事件处理程序绘制并在第一行删除了事件处理程序,然后做更多的初始化代码。 这只有当你做nothave任何自定义的绘画作品。 另外,如果你需要做的风俗画,你可以添加一个标志,检查,每次油漆执行。

//Paint only runs once
private void tabPage1_Paint(object sender, PaintEventArgs e)
{
tabPage1.Paint -= tabPage1_Paint;
//Do initialization here
}

/////////////////////////////////////////////////////////////////////////////////

//Paint always runs

private bool IsFirstPaint = true;

private void tabPage1_Paint(object sender, PaintEventArgs e)
{
if(IsFirstPaint)
{
IsFirstPaint = false;
//Do initialization here
}
//Do custom painting here
}

分类:的WinForms 时间:2012-10-23 人气:25
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.639 (s). 10 q(s)