【问题标题】:How can I store the actual control in a list?如何将实际控件存储在列表中?
【发布时间】:2010-10-19 14:40:41
【问题描述】:

长话短说,我想将动态加载的用户控件粘贴到引用已加载的实际对象的列表中。所以我可以进入列表并从用户控件中提取结果。我想使用 mycontrol.GetResult() 然后它将引用控件并从已填写的表单中获取结果,结果将作为字符串返回。我不希望它初始化相同类型的新控件,因为那时我将无法接收我的结果。有什么建议吗?

谢谢!

【问题讨论】:

    标签: c# asp.net list dynamic


    【解决方案1】:

    只需创建一个控件列表:

    var controls = new List<Control>();
    
    foreach(var control in Page.Controls)
    {
        controls.Add(control);
    }
    

    然后,您可以根据需要使用该列表来引用每个控件(这是一个简单的示例...您填充列表的代码很可能会更复杂)。

    【讨论】:

      【解决方案2】:

      谁以编程方式添加控件?页面还是用户控件?该组件可以做到。否则,另一个技巧是用户控件动态加载其他用户控件。您可以给页面一个接口定义,比如 IDynamicControlHolder,它具有 List 类型,并在动态控件(或其他地方)中执行。

      if (this.Page is IDynamicControlHolder)
         // change this to the appropriate reference
         ((IDynamicControlHolder)this.Page).DynamicControls.Add(this); 
      

      【讨论】:

      • 我有一个向导控件,onInit 它搜索一个目录并添加所有已放入其中的用户表单。所以向导步骤是动态加载的,然后用户控件被动态加载到向导步骤中。我已经有一个列表,但它不包含控件,只是我为要存储的控件属性创建的对象。
      • “它不包含控件只是对象” - 通过控件我假设您的意思是用户控件,而不是向导步骤。我上面给你的描述是一种自我注册的做事方式;只要页面实现了一个接口(这需要返回一个名为 DynamicControls 的 List 实例),用户控件在 OnLoad 甚至可能在 OnInit 中都可以工作,就会注册自己。
      【解决方案3】:

      所以我已经创建了类似的代码并将控件加载到列表中,但我不确定如何从放置回对象的表单中获取结果。在看到代码示例后,我意识到我已经在这样做了,所以必须有更好的方法来获得我想要的东西。我操纵了我现有的方法之一,现在我使用它在用户进入验证屏幕时将结果加载到我的对象中。这很好用,感谢您确认我做对了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-04
        • 2023-04-06
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 2017-11-08
        • 1970-01-01
        相关资源
        最近更新 更多