C# 以编程方式使用用户控件

C# 以编程方式使用用户控件,c#,asp.net,dynamic,user-controls,C#,Asp.net,Dynamic,User Controls,我有一个项目,其中我制作了两个用户控件:一个图例和一个图例项 在我的网页上,我正在检索要加载到LegendItem控件(设置基本文本和颜色信息)中的信息集合,然后将这些信息添加到我的Legend控件(Legend控件上有一个面板,我在网页上引用了Legend usercontrol) 我很难弄清楚如何正确地获取LegendItem控件的句柄,以便访问其属性并进行设置 如果您需要帮助,我可以提供代码-但我遇到了麻烦,需要一些帮助!感谢您花时间阅读此文章!了解动态控件的关键是了解页面生命周期。您需要

我有一个项目,其中我制作了两个用户控件:一个图例和一个图例项

在我的网页上,我正在检索要加载到LegendItem控件(设置基本文本和颜色信息)中的信息集合,然后将这些信息添加到我的Legend控件(Legend控件上有一个面板,我在网页上引用了Legend usercontrol)

我很难弄清楚如何正确地获取LegendItem控件的句柄,以便访问其属性并进行设置


如果您需要帮助,我可以提供代码-但我遇到了麻烦,需要一些帮助!感谢您花时间阅读此文章!

了解动态控件的关键是了解页面生命周期。您需要确保在page_init事件期间创建控件,以确保控件得到正确处理服务器端


可以帮助您管理动态创建的控件的一个很好的控件是

,您可以使用LoadControl实例用户控件

然后设置属性

然后将控件添加到图例控件上的asp.net占位符控件中


LegendItem li = (LegendItem)LoadControl("LegendItem.aspx");
li.name = "bob"
legend.placeholder.controls.add(li);

我不确定您想做什么。如果您只需要将控件(静态)添加到页面中,下面是您的操作方法:








在代码中,您可以通过ID定位控件,将其强制转换为您的类型,然后执行任何操作。顺便说一句,MinValue和MaxValue是在控件实现上定义的属性

现在,如果要动态创建控件实例,需要使用页面的LoadControl方法。此方法返回控件实例,但要对其执行任何操作,需要将其添加到页面的控件集合中,如下所示:

page.Controls.Add(mycontrol)

在OnRender事件之前,您可以在页面生命周期中的任何位置执行此操作。请记住,一旦执行此操作,控件将开始追赶-它将被推送通过它错过的所有页面生命周期事件。还请记住,如果页面被发回,您需要确保控件完全按照处理viewstate的时间


顺便说一句,我认为在服务器端做这种工作有点过时。你最好用JQuery之类的东西做一些事情。这太奇怪了。除非我给用户控件一个名称空间,否则我的aspx.cs页面不会识别我的控件。现在我可以创建对象、正确地强制转换等等


谢谢大家的尝试。

我想我需要澄清一下。我确实理解页面生命周期-这个问题不是关于这个。我希望能够在代码中创建LegendItem,就像我可以创建文本框、DropDownList等一样,设置其属性,并将其添加到Legend用户控件。我可以创建自己的类库并创建g自定义控件,然后引用该DLL,但如果可能的话,我不想对此进行详细说明。感谢您的回答,lomaxx。这对我不起作用-我已经尝试过。我的web应用程序没有将LegendItem识别为对象。正在获取"“类型或命名空间名称”“LegendItem”“cound not found”“错误消息。我的网页中有对该控件的引用。不确定还要尝试什么。@Cen-如果不查看您的项目和代码,我真的无法提供更多建议。您说您的网页中有对该控件的引用?这是什么意思?如果它都在o中?”ne project您不需要引用。也许您需要将LoadControl返回的“object”类型强制转换为“LegendItem”类型?很抱歉,LoadControl返回基类型“control.”引用标记,正如本文()所述:我已尝试强制转换-代码根本无法识别LegendItem对象。(缺少类型引用错误消息)