我的表单在C#(.Net Compact Framework)中完全加载时的通知?

时间:2010-11-22 09:03:47

标签: c# .net compact-framework

我的应用程序中有一个表单,我想在表单

时进行一些处理

完全加载但是我没有任何事件或者在加载完成时我可以绑定的东西。

有没有人有任何想法,我该怎么做?

5 个答案:

答案 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.IdleOnLoad一起使用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.
}