OnLoad 方法可用于 UserControl 但不适用于 Control
OnLoad method available for UserControl but not for Control
在 Windows 窗体中。
我有一个自定义控件,它只包含一个控件: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 访问它吗?
有没有我可以使用的另一种方法,即在控件完成加载时调用的方法?
(假设这是一个 ASP.NET 问题)
您的源代码中似乎有一个不正确的 using 指令,例如:
using System.Windows.Forms;
因此您的控件派生自 System.Windows.Forms.Control
,它没有 OnLoad
方法。
将 using 指令替换为 using System.Web.UI;
,它应该可以编译(尽管 System.Web.UI
中没有 PictureBox
控件)。
UserControl
有一个加载事件 protected virtual void OnLoad(EventArgs e)
[System.Windows.Forms.UserControl.Load
] 并且因为它是虚拟的,所以它可以像您所做的那样被覆盖。
但是 PictureBox
没有任何此类事件,因此您无法覆盖。相反,它有一个 public 方法加载 public void Load()
和事件,如 public event AsyncCompletedEventHandler LoadCompleted
、public event ProgressChangedEventHandler LoadProgressChanged
等。这就是你得到错误的原因。
UserControl
UserControl -> ContainerControl -> ScrollableControl -> Control 的继承层次结构,PictureBox
是 PictureBox -> Control,public void Load() 只是一个 public PictureBox 中的方法 class。
正如我在评论中提到的,提及 OnLoad
的 MSDN 文档是针对 Web UI 控件的,而不是 the WinForms one。 WinForms 没有 OnLoad
方法。
最好的地方是在构造函数中分配图像,但不幸的是你提到这是不可能的。也许您可以处理 OnCreateControl
/CreateControl
事件,或者您应该让控件的用户在正确的时间分配图像。
我通常建议避免使用 form/control 的 Load
事件来做事,因为 64 位 windows 上的 32 位程序存在异常被吞噬的问题[ SO Q&A, article].
在 Windows 窗体中。
我有一个自定义控件,它只包含一个控件: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 访问它吗?
有没有我可以使用的另一种方法,即在控件完成加载时调用的方法?
(假设这是一个 ASP.NET 问题)
您的源代码中似乎有一个不正确的 using 指令,例如:
using System.Windows.Forms;
因此您的控件派生自 System.Windows.Forms.Control
,它没有 OnLoad
方法。
将 using 指令替换为 using System.Web.UI;
,它应该可以编译(尽管 System.Web.UI
中没有 PictureBox
控件)。
UserControl
有一个加载事件 protected virtual void OnLoad(EventArgs e)
[System.Windows.Forms.UserControl.Load
] 并且因为它是虚拟的,所以它可以像您所做的那样被覆盖。
但是 PictureBox
没有任何此类事件,因此您无法覆盖。相反,它有一个 public 方法加载 public void Load()
和事件,如 public event AsyncCompletedEventHandler LoadCompleted
、public event ProgressChangedEventHandler LoadProgressChanged
等。这就是你得到错误的原因。
UserControl
UserControl -> ContainerControl -> ScrollableControl -> Control 的继承层次结构,PictureBox
是 PictureBox -> Control,public void Load() 只是一个 public PictureBox 中的方法 class。
正如我在评论中提到的,提及 OnLoad
的 MSDN 文档是针对 Web UI 控件的,而不是 the WinForms one。 WinForms 没有 OnLoad
方法。
最好的地方是在构造函数中分配图像,但不幸的是你提到这是不可能的。也许您可以处理 OnCreateControl
/CreateControl
事件,或者您应该让控件的用户在正确的时间分配图像。
我通常建议避免使用 form/control 的 Load
事件来做事,因为 64 位 windows 上的 32 位程序存在异常被吞噬的问题[ SO Q&A, article].