覆盖组件 class 中的表单 OnPaint 方法
Overriding a forms OnPaint method in component class
我希望重写我的组件的父窗体的 OnPaint 方法..
但是我在执行此操作时遇到了 2 个错误,第一个是分配父表单事件处理程序
"OnPaint" 没有重载匹配委托 "PaintEventHandler"
无法使用实例引用访问来自 "Region.FromHrgn(IntPtr)" 的成员;用类型名称来限定它。
这是我的代码
private Control hostControl;
public override ISite Site
{
get { return base.Site; }
set
{
base.Site = value;
if (value == null)
{
return;
}
IDesignerHost host = value.GetService(typeof(IDesignerHost)) as IDesignerHost;
if (host != null)
{
IComponent componentHost = host.RootComponent;
if (componentHost is ContainerControl)
{
hostControl = componentHost as ContainerControl;
hostControl.FindForm().Paint += new PaintEventHandler(this.OnPaint);
}
}
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
hostControl.Region = hostControl.Region.FromHrgn(CreateTriangle(0, 0, this.Width, this.Height, this.Width, this.Height));
}
我哪里错了?
重写控件的 OnPaint()
方法通常推荐用于 THAT 控件的自定义绘制,而不是绘制另一个控件。您在代码中尝试做的是将宿主表单的 Paint
事件附加到控件的 OnPaint()
方法。这可能行不通。
如您在 MSDN 文档中所见,控件的 Paint
事件由 OnPaint()
方法引发。您可以附加自定义事件处理程序:
hostControl.FindForm().Paint += new PaintEventHandler(Form_Paint);
private void Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
...
}
在 PaintEventArgs
参数中,您将获得绘图所需的参数。
我希望重写我的组件的父窗体的 OnPaint 方法..
但是我在执行此操作时遇到了 2 个错误,第一个是分配父表单事件处理程序
"OnPaint" 没有重载匹配委托 "PaintEventHandler"
无法使用实例引用访问来自 "Region.FromHrgn(IntPtr)" 的成员;用类型名称来限定它。
这是我的代码
private Control hostControl;
public override ISite Site
{
get { return base.Site; }
set
{
base.Site = value;
if (value == null)
{
return;
}
IDesignerHost host = value.GetService(typeof(IDesignerHost)) as IDesignerHost;
if (host != null)
{
IComponent componentHost = host.RootComponent;
if (componentHost is ContainerControl)
{
hostControl = componentHost as ContainerControl;
hostControl.FindForm().Paint += new PaintEventHandler(this.OnPaint);
}
}
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
hostControl.Region = hostControl.Region.FromHrgn(CreateTriangle(0, 0, this.Width, this.Height, this.Width, this.Height));
}
我哪里错了?
重写控件的 OnPaint()
方法通常推荐用于 THAT 控件的自定义绘制,而不是绘制另一个控件。您在代码中尝试做的是将宿主表单的 Paint
事件附加到控件的 OnPaint()
方法。这可能行不通。
如您在 MSDN 文档中所见,控件的 Paint
事件由 OnPaint()
方法引发。您可以附加自定义事件处理程序:
hostControl.FindForm().Paint += new PaintEventHandler(Form_Paint);
private void Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
...
}
在 PaintEventArgs
参数中,您将获得绘图所需的参数。