我的应用程序中有一个表单,我想在表单
时进行一些处理完全加载但是我没有任何事件或者在加载完成时我可以绑定的东西。
有没有人有任何想法,我该怎么做?
答案 0 :(得分:8)
什么exaclty意味着“满载”?你是说,“加载”事件是否成功进行了?
你可以这样做:
public class MyForm : Form {
protected override void OnLoad( EventArgs e ) {
// the base method raises the load method
base.OnLoad( e );
// now are all events hooked to "Load" method proceeded => the form is loaded
this.OnLoadComplete( e );
}
// your "special" method to handle "load is complete" event
protected virtual void OnLoadComplete ( e ) { ... }
}
但如果你的意思是“完全加载”,“表单已加载并显示”,你也需要覆盖“OnPaint”方法。
public class MyForm : Form {
private bool isLoaded;
protected override void OnLoad( EventArgs e ) {
// the base method raises the load method
base.OnLoad( e );
// notify the "Load" method is complete
this.isLoaded = true;
}
protected override void OnPaint( PaintEventArgs e ) {
// the base method process the painting
base.OnPaint( e );
// this method can be theoretically called before the "Load" event is proceeded
// , therefore is required to check if "isLoaded == true"
if ( this.isLoaded ) {
// now are all events hooked to "Load" method proceeded => the form is loaded
this.OnLoadComplete( e );
}
}
// your "special" method to handle "load is complete" event
protected virtual void OnLoadComplete ( e ) { ... }
}
答案 1 :(得分:4)
我认为OnLoad
事件并不是您想要的,因为它会在显示表单之前发生。您可以Application.Idle
与OnLoad
一起使用OnLoaded
活动:
protected override void OnLoad(EventArgs args)
{
Application.Idle += new EventHandler(OnLoaded);
}
public void OnLoaded(object sender, EventArgs args)
{
Application.Idle -= new EventHandler(OnLoaded);
// rest of your code
}
答案 2 :(得分:0)
答案 3 :(得分:0)
我的方法类似于TcKs接受的答案。 我遇到的问题是我有一组控件响应VisibleChanged的事件处理程序,事件处理程序在Panel中移动控件。麻烦是(当然)在首次加载表单时可见性发生了变化 - 但是在.Load()事件之后。
我为表单创建并设置了bool值:
private bool formShown = false;
然后将以下行添加到Form_Load()
this.Paint += (s, args) => { formShown = true; };
我的VisibleChanged()事件处理程序的第一行为:
if(!formShown) { return; }
简洁实用。
答案 4 :(得分:-1)
您可以使用表单的Load
事件。在表单的构造函数中写下以下行
this.Load += new System.EventHandler(this.Form1_Load);
然后编写以下方法,您可以在其中执行某些操作。
void Form1_Load(object sender, EventArgs e)
{
// do some stuff here.
}