【问题标题】:Transparency in composite controls?复合控件的透明度?
【发布时间】:2009-10-07 17:19:24
【问题描述】:

我有一个包含组框控件的复合控件。问题在于它涵盖了放置在此复合控件之上的控件。尽管我将新控件发送到顶部,所以它们应该是可见的,但它们不是。

当我只使用 groupbox 时,它当然会通过事物显示,因此您可以看到包含的控件,只是由 groupbox 概述。

我是否必须做一些事情才能在复合控件中获得相同的效果/行为?

编辑:左侧显示设计器中的控件,右侧显示运行时的控件。

【问题讨论】:

  • 你能截取设计器的截图,显示你的控件应该在哪里吗?如果它们被隐藏,您可能会在它们应该可见的位置画出轮廓。这可能有助于为我们其他人澄清您的问题。
  • 如果您将按钮移到控件的边缘上方 - 按钮会发生什么情况?如果控件之外的部分仍然可见,则您的控件的行为不像容器。但是如果它被剪裁了——那么你的控件就像一个容器一样工作——至少在设计器中。

标签: c# .net winforms gdi+


【解决方案1】:

可能 Quintin 是对的,并且您的控件的设计器支持出了点问题,也就是说,您创建了 ControlA,并通过在设计时添加按钮将其扩展到 ControlB。当您实例化 ControlB 时,该按钮不可见。

您能否在运行时使用断点/断言/等进行验证:`

  1. ChildButton 存在。
  2. ChildButtonCompositeControl.Controls 的成员。
  3. ChildButton 位置是CompositeControl 的“可见”。
  4. ChildButton 可见。

如果是我,我会在控件的构造函数中设置断点,然后进入InitializeComponent(),检查所有内容是否已正确创建和添加。如果ChildButton 存在,并且在CompositeControl.Controls 中有引用并且它的位置在视图中,那么我不知道为什么它没有显示。

【讨论】:

  • 谢谢,如果我没记错的话,您认为 ChildButton 是复合控件的一部分吗?因为不是。复合控件由 2 个控件组成:1 个复选框,1 个组框。但后来当我使用这个复合控件并在其上放置一些控件时,作为用户,这些控件仅在设计时显示在顶部。
  • 是的,我知道你是这个意思。我开始认为设计器对您的控件的支持已损坏。当您在 CompositeControl 初始化时单步执行代码时,请检查一切是否如您所愿。作为最后的手段,您可以尝试在运行时将按钮添加到您的控件,以验证它是否正确显示。如果是这样,那么您就知道您遇到了设计师问题。
  • 谢谢,如果是设计师的问题,会解决吗?
  • 如果你已经实施了 Quintin 的建议,我可以提出的建议不多了。
【解决方案2】:

如果您的意思是希望自定义控件表现得像一个容器(就像组框通常那样),那么您需要让控件和设计者知道应该如何处理它。

记得实现IContainerControl 并使用适当的设计器属性装饰对象以支持设计器容器 IE:

[Designer("System.Windows.Forms.Design.ParentControlDesigner,System.Design", typeof(System.ComponentModel.Design.IDesigner))]

【讨论】:

  • 谢谢,这也很有用。但是对于我的问题,它的行为就像一个组合框,但它涵盖了其中的控件。我可以在设计器中看到它们,但是当您运行该工具时,它们会出现在复合控件的后面。
猜你喜欢
  • 2011-01-21
  • 1970-01-01
  • 2016-02-15
  • 2012-03-28
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
相关资源
最近更新 更多