【问题标题】:How do I reference a dynamically named control on a UserControl from the Parent Form?如何从父窗体引用 UserControl 上的动态命名控件?
【发布时间】:2019-03-08 04:37:51
【问题描述】:

如何从父窗体引用 UserControl 上的动态命名控件? (在 Winforms 中)。

我有一个单一的父窗体,但它可以加载大约 20 个左右的用户控件中的任何一个。我们会打电话给他们ucA, ucB, etc

每个 UserControl 都有不同数量的文本框,但命名为 tbA01, tbA02, etc on ucA and tbB01, tbB02, etc on ucB

如何引用文本框的值?

我似乎无法直接引用 UserControl 的名称。我知道 UserControl 的名称为字符串,但似乎无法将其转换为控件。 UserControl 上的文本框也是如此。我确信我可以使用 Control.Find() 从一个简单的字符串中获取文本框的名称。但这似乎不起作用,我认为它只会寻找 ParentForm 上的控件,而不是 UserControl 上的控件集合。我假设会有一个使用 TryCast 或 DirectCast 并在参数中使用 Control.Find() 的方法。但我还没有找到解决办法。

任何帮助将不胜感激!

【问题讨论】:

  • 让 UserControls 公开公共方法或属性,允许任何其他知道 UserControl 存在的东西获取或设置内部值(例如,TextBox 的 Text 属性)。与 ComboBox 或 ListBox 做的事情相同:您不直接设置 ListControl 项目的编辑控件的文本。您使用公共属性/方法。
  • 我似乎无法直接引用 UserControl 的名称。这是不太可能的。您在表单中有一个 UserControl 的实例。您是否在运行时添加了 UserControl?将您构建的 UC 插入 List(Of UserControl) 并使用它来引用 UC 或使用 Controls.Find() 检索实例。

标签: vb.net textbox user-controls


【解决方案1】:

谢谢吉米!您的回答确实帮助我了解了提出解决方案的不同方法。我现在可以工作了。这是我使用的:

Dim matches() As Control
matches = Me.Controls.Find(TblName, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is TextBox Then
    Dim tb As TextBox = DirectCast(matches(0), TextBox)
    ...
Endif

【讨论】:

    猜你喜欢
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    相关资源
    最近更新 更多