控件完全加载后立即启动的事件

本文关键字:启动 事件 加载 控件 | 更新日期: 2023-09-27 18:07:30

我已经获得了覆盖WebBrowser控件的用户控件。有一个方法从父窗体中获取BackgroundImage的一个区域,并使其成为html代码中的背景。它是这样工作的:

  1. 使自己不可见。
  2. 捕获父窗体
  3. 使自己可见
  4. 将捕获图像的特定区域设置为背景。
  5. 刷新自己。

我希望该方法在控件完全加载后立即被触发。我不能在构造函数中这样做,因为我需要使用的一些重要对象和父属性仍然是空的。我把它放在onvisiblechange事件,并设置bool变量为false,所以它只运行一次,但每次我重建我的项目时它都会触发(即使没有运行-它创建了我在html代码中用作背景的位图,但不同的目录,因为我使用directory . currentdirectory()方法)。也尝试用OnLoad事件触发它,但它会产生与onvisiblechange相同的问题。是否有比OnVisibleChanged更合适的事件?

p。我一直想知道是否每个事件都必须触发它的基类的事件。有必要这样做吗?我看不出有什么不同,没有它一切都很好。如果把它留在那里更好,它应该在事件方法的开始还是结束?

控件完全加载后立即启动的事件

没有'完全加载'的概念,在Winforms中创建控件是一个原子操作,并由OnHandleCreated()发出信号。你在这里寻找的是有控制完全绘制。在Windows中,绘画是一个低优先级的任务,只有在没有其他事情需要做的时候才会执行。

通过重写WndProc()并捕获WM_PAINT:

获取该通知
bool fullyPainted = false;
protected override void WndProc(ref Message m) {
    base.WndProc(ref m);
    if (m.Msg == 15 && !fullyPainted) {
        fullyPainted = true;
        // etc...
    }
}