在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完成加载时,是否还有另一种可以使用的方法?
答案 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 LoadCompleted
,public event ProgressChangedEventHandler LoadProgressChanged
等。这就是你得到错误的原因。
UserControl
UserControl的继承层次结构 - > ContainerControl - > ScrollableControl - >控制和PictureBox
它的PictureBox - > Control,public void Load()只是PictureBox类中的一个公共方法。