覆盖OnPaint

如果我重写OnPaint并在控件上绘制一个正方形,那么当我在设计器中预览时,如何显示e.graphics.draw …?

http://msdn.microsoft.com/en-us/magazine/cc164048.aspx

http://msdn.microsoft.com/en-us/magazine/cc164145.aspx

虽然您可以手动注册Control.OnPaint来添加您的设计时UI,但您会发现覆盖OnPaintAdornments是一个更好的选择,因为它仅在控件的设计时/运行时UI被绘制后调用,让您放置锦上添花(见图20)。 只需将DesignerAttribute添加到ClockControl类即可完成关联:复制代码

[Designer(typeof(ClockControlDesigner))]类ClockControl:Control {…}

如果您正在尝试为控件绘制一个焦点矩形,并在将控件添加到表单后操作控件时可以看到它,那么Gaijin42的方法应该可行。

如果您正在尝试查看自定义绘制控件的外观…

  • 如果您已在控件中覆盖OnPaint方法,则在将控件添加到窗体(或其他控件)后查看控件时,应该会看到该OnPaint的结果。

  • 如果您在查看控件本身的设计器时试图查看Paint的结果, 我认为这是不可能的 (至少不是VS2005):

    不幸的是,这是不可能的。 当您编写用户控件的行为时,代码未编译,设计器实际上使用普通用户控件来托管子控件。 OnPaint覆盖等将不会运行。

    要调试控件中的覆盖,需要在某种主机中运行它。 VS2005为此目的提供了一个新的控制主机,但我发现有时甚至这还不够。