OnLoad方法可用于UserControl但不适用于Control

时间:2015-11-22 18:33:28

标签: c# windows-forms-designer

在WindowsForms中。

我有一个只包含一个控件的自定义控件:PictureBox。

public partial class VarIllumButton : UserControl

它使用OnLoad方法:

    protected override void OnLoad(EventArgs e) 
    {
        base.OnLoad(e); // Handle the default function
        pictureBox.Image = image0;
    }

由于自定义控件只有1个控件,我希望将其更改为:

public partial class VarIllumButton : PictureBox

但后来我收到错误

'System.Windows.Forms.PictureBox' does not contain a definition for 'OnLoad'    

然而,我看到the Control class does have an OnLoad method

您能想到为什么我可以从UserControl访问它,而不是从Control?

访问它

当Control完成加载时,是否还有另一种可以使用的方法?

3 个答案:

答案 0 :(得分:2)

正如我在评论中提到的,提及OnLoad的MSDN文档适用于Web UI控件,而不是the WinForms one。 WinForms没有OnLoad方法。

最好的地方是在构造函数中分配图像,但不幸的是你提到这是不可能的。也许您可以处理OnCreateControl / CreateControl事件,或者您应该让控件的用户在正确的时间分配图像。

我通常建议避免使用表单/控件的Load事件来执行操作,因为在64位窗口上使用32位程序吞下异常存在问题[SO Q&A,{{ 3}}]。

答案 1 :(得分:0)

(假设这是一个ASP.NET问题)

您的源代码中似乎有一个不正确的using指令,例如:

using System.Windows.Forms;

因此,您的控件来自System.Windows.Forms.Control,它没有OnLoad方法。

将using指令替换为using System.Web.UI;,并且应该编译(尽管PictureBox中没有System.Web.UI控件。)

答案 2 :(得分:0)

UserControl有一个加载事件protected virtual void OnLoad(EventArgs e) [System.Windows.Forms.UserControl.Load],因为它是虚拟的,它可以在您完成时被覆盖。

PictureBox没有任何此类事件,因此您无法覆盖。相反,它有一个公共方法加载public void Load()和事件,如public event AsyncCompletedEventHandler LoadCompletedpublic event ProgressChangedEventHandler LoadProgressChanged等。这就是你得到错误的原因。

UserControl UserControl的继承层次结构 - > ContainerControl - > ScrollableControl - >控制和PictureBox它的PictureBox - > Control,public void Load()只是PictureBox类中的一个公共方法。