我希望覆盖我的组件的父窗体的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));
}
我哪里错了?
答案 0 :(得分:0)
通常建议覆盖控件的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
参数中,您将获得绘图所需的参数。