【发布时间】:2009-10-20 15:12:04
【问题描述】:
我有一个用户控件,里面有一些 WinForm 控件。我希望能够自己绘制这些内部控件(出于滚动目的,其中一些会保留,其他会移动)。
即使我重写了 OnPaint 和 OnPaintBackground 方法,这些控件仍会继续显示在我的用户控件上,现在完全是黑色的,因为上面没有绘画方法。
有没有一种方法可以禁止绘制这些控件,然后使用每个控件的 DrawToBitmap 方法自行绘制它们?
【问题讨论】:
我有一个用户控件,里面有一些 WinForm 控件。我希望能够自己绘制这些内部控件(出于滚动目的,其中一些会保留,其他会移动)。
即使我重写了 OnPaint 和 OnPaintBackground 方法,这些控件仍会继续显示在我的用户控件上,现在完全是黑色的,因为上面没有绘画方法。
有没有一种方法可以禁止绘制这些控件,然后使用每个控件的 DrawToBitmap 方法自行绘制它们?
【问题讨论】:
是的。从 UserControl 的一组子控件中删除它们(或者更好的是,永远不要将它们添加到)。不过,模拟与控件的交互将是一个 PITA。
您是否只需要控件“看起来”就像它们在那里一样。或者他们真的需要在那里吗?如果是后者,您最好通过手动重新定位控件来以某种方式伪造滚动。
尝试重新发明窗口系统是一种痛苦的练习。如果你在它的范式内学习和工作,你会变得更好。
【讨论】:
如果不需要交互,只需将每个子控件设置为.Visible = false即可。
要不然你试过WM_SETREDRAW吗?
【讨论】: