我有一个自定义控件:它是托管代码,它是 System.Windows.Forms.Control 的子类。
我想将编辑框、选择列表、组合框、单选按钮等添加到此控件上的位置。一个简单的方法是简单地将这些类的实例添加到 Controls 集合中,以便它们成为子控件。
将它们添加为子控件可能会产生一些微妙的问题,例如:
我的控件上有滚动条,它似乎可以滚动控件的内容(内容大于控件本身);当子控件靠近屏幕边缘时,我想半显示(即剪辑)该子控件(即使其一半位于物理屏幕边缘之外),但真正的子控件不能位于其父级边界之外。
还有其他潜在问题吗?
当我使用 IE7 显示包含组合框等的http://www.tizag.com/htmlT/htmlselect.php(例如),然后当我使用 Spy++ 监视 IE7 时,我只看到一个没有子级的窗口/控件实例(其类名为“Internet Explorer_Server”)。
我猜这意味着在 IE7 中,呈现组合框的功能内置于 IE7 控件本身,并且 IE7 不使用标准控件作为子控件。
问题:
- 将标准控件作为自定义控件的子控件重用,还是在自定义控件本身内重新实现标准控件的功能更好?
- 您是否有任何与这两种情况相关的警告(警告)要分享?
- 如果我想在自定义控件中重新实现标准控件的功能,您是否知道我可以重用的任何现有代码(实现此功能)?
如果这样的代码已经存在,我不知道如何搜索它(我的搜索发现,例如,所有者绘制的组合框和标准组合框的扩展):也许很少有人从头开始重新实现标准控件?
编辑
我发现了一个半相关的问题:How to render a control to look like ComboBox with Visual Styles enabled?