【问题标题】:Allow IExtenderProvider control to attach to controls on a UserControl允许 IExtenderProvider 控件附加到 UserControl 上的控件
【发布时间】:2010-03-25 17:47:38
【问题描述】:

VB.NET 2.0 框架

我开发了一个实现 IExtenderProvider 的控件,以便附加到控件并显示用于翻译该控件文本的表单。这适用于表单上的常规控件,但默认情况下 IExtenderProvider 不附加到 UserControls 上的控件。

是否可以修改 UserControl 或我的 IExtenderProvider 控件以使其能够附加到 UserControl 上的控件?

谢谢!

【问题讨论】:

  • 您需要将问题更改为“UserControl 中的控件”或“构成 UserControl 的控件”。

标签: .net vb.net winforms


【解决方案1】:

如果您拥有 IExtenderProvider 或 UserControl 的源代码,只需将实现更改为 1)让扩展程序“挖掘”到 UserControl.Controls 属性 或 2)让 UserControl 公开包装控件属性的属性将被扩展。 [如果扩展器扩展了 TextBox 控件,则无论公开什么属性,都无法使 UserControl 看起来像 TextBox。]

【讨论】:

  • 我希望不必按照您在第一个建议中的建议去做,并让它自动遍历 UserControl 控件列表并附加到适当的控件,就像它如何执行 Panel 或 Groupbox (所以我可以在设计器中切换设置),但这似乎不可能。我通过遍历列表并强制它附加一些默认设置来实现它。
  • "它如何做一个面板或组框" 这些只是容器控件。放置在他们身上/之上的任何控制仍然保持他们的身份。 UserControl 不是容器控件。 UserControl 中使用的控件成为 UserControl。
  • 您最好通过 UserControl 公开您正在扩展的属性。扩展器不负责确定要扩展哪些控件。由用户控件决定/公开它将公开哪些属性。
  • 没错,一个UserControl不是容器控件,但是如果将设计器设置为容器,它可以包含其他控件。我无法通过 UserControl“公开”扩展程序的属性。我已经为我在 UserControl 上扩展的控件添加了属性,但它们没有在属性窗口中接收扩展器属性。
  • 我必须收回我的陈述。我在考虑你的问题,所以我“挖掘”了对象浏览器。 UserControl 继承自 ContainerControl,ContainerControl 继承自 ScrollableControl,后者又继承自 Control。看来您所能做的就是创建一个“挖掘”到 UserControl Controls 属性的 IExtenderProvider。
猜你喜欢
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多