覆盖OnPaint

时间:2009-04-10 19:54:58

标签: c# winforms designer windows-forms-designer

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

2 个答案:

答案 0 :(得分:6)

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类完成了   协会:复制代码

     

[   设计师(typeof运算(ClockControlDesigner))   ]类ClockControl:控制{...}

答案 1 :(得分:1)

如果您正在尝试为控件绘制焦点矩形,并在将控件添加到表单后操作控件时可以看到它,那么Gaijin42's approach应该可以正常工作。

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

  • 如果您覆盖了控件中的OnPaint方法,则在将控件添加到表单后查看控件时,应该会看到OnPaint的结果(或者另一个控制)。

  • 如果您在查看控件本身的设计器时尝试查看Paint的结果,I don't think that is possible(至少不是VS2005):

      

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

         

    调试控件中的覆盖   你需要在某种程度上运行它   主办。 VS2005提供了新的控件   主持人为此目的但我发现了   即使这有时也不够。