开发控件的网友请留意 - 用例子说明怎样动态创建控件.

Lostinet 2004-10-11 10:51:14
因为之前有一段时间没有来,最近问这个的好象还是很多的.
所以特意写了个例子. (之前已经写过多次了,不过帖子都存档了)

没有多写注释,有问题的请问.

希望对你开发比较动态的控件有帮助.

<%@ Page Language=C# %>
<SCRIPT runat="server">

public class MyControl : Control , INamingContainer
{
Button btn1;
HyperLink link1;

LinkButton btn2;
HyperLink link2;

override protected void CreateChildControls()
{
CreateControlsByType();
}

protected void CreateControlsByType()
{
object o=ViewState["type"];
int t=o==null?1:(int)o;//默认是方案1

if(t==1)
{
btn1=new Button();
btn1.Text="切换到方案2";
btn1.Click+=new EventHandler(btn1_Click);
link1=new HyperLink();
link1.NavigateUrl="http://www.asp.net";
link1.Text="Link1";

Controls.Add(new LiteralControl("<table border=1><tr><td>"));
Controls.Add(btn1);
Controls.Add(new LiteralControl("</td><td>"));
Controls.Add(link1);
Controls.Add(new LiteralControl("</td></tr></table>"));
}
else//方案2
{
btn2=new LinkButton();
btn2.Text="切换到方案1";
btn2.Click+=new EventHandler(btn2_Click);

link2=new HyperLink();
link2=new HyperLink();
link2.NavigateUrl="http://www.microsoft.com";
link2.Text="Link2";

Controls.Add(new LiteralControl("<table border=1><tr><td>"));
Controls.Add(btn2);
Controls.Add(new LiteralControl("</td><td>"));
Controls.Add(link2);
Controls.Add(new LiteralControl("</td></tr></table>"));
}
}
void EnsureRecreateControls()
{
if(ChildControlsCreated)
{
Controls.Clear();
CreateControlsByType();
}
else
{
EnsureChildControls();
}
}

void btn1_Click(object sender,EventArgs args)
{
ViewState["type"]=2;

EnsureRecreateControls();

link2.Text="已经切换为2方案了";
}
void btn2_Click(object sender,EventArgs args)
{
ViewState["type"]=1;

EnsureRecreateControls();

link1.Text="已经切换为1方案了";
}
}

override protected void OnInit(EventArgs args)
{
holder1.Controls.Add(new MyControl());
base.OnInit(args);
}
</SCRIPT>
<html>
<head>
<title>Sample By Lostinet</title>
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</head>
<body>
<form id="SampleForm" method="post" runat="server">
<asp:PlaceHolder Runat=server ID=holder1>
</asp:PlaceHolder>
<br>
<asp:Button Runat=server Text="在控件之外进行回发"></asp:Button>
</form>
</body>
</html>
...全文
1225 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
nchen123 2004-10-31
  • 打赏
  • 举报
回复
学习
xzq686 2004-10-25
  • 打赏
  • 举报
回复
学习
onlytiancai 2004-10-23
  • 打赏
  • 举报
回复
还是看不懂呀
chilin 2004-10-23
  • 打赏
  • 举报
回复
学习
Altaori 2004-10-23
  • 打赏
  • 举报
回复
up
smx717616 2004-10-23
  • 打赏
  • 举报
回复
支持一下吧。
zhn0410 2004-10-23
  • 打赏
  • 举报
回复
学习。
2000lhzh 2004-10-23
  • 打赏
  • 举报
回复
厉害。学习中。。。。。
wenww 2004-10-22
  • 打赏
  • 举报
回复
狮子 2004-10-22
  • 打赏
  • 举报
回复
戴兄的贴子精简到位

问个问题,如果禁用了ViewState,还可以怎样处理一下?
吐司vivi 2004-10-20
  • 打赏
  • 举报
回复
谢谢搂主
xueqs 2004-10-20
  • 打赏
  • 举报
回复
mark
gucs 2004-10-20
  • 打赏
  • 举报
回复
向各位学习
webdiyer 2004-10-20
  • 打赏
  • 举报
回复
谢谢Lostinet!!

to:Edifier0709(如果想飞得高,就应该把地平线忘掉!) 、 nanfansky(新手登场)

我的控件的源代码就在安装后的虚拟目录下,需要下载AspNetPager.msi安装后才能看到。
xubinhui 2004-10-19
  • 打赏
  • 举报
回复
感谢!
fason 2004-10-18
  • 打赏
  • 举报
回复
简单浅显 ^_^
chuxuecharp 2004-10-18
  • 打赏
  • 举报
回复
嗯。。MS有一期在线讲座说过这个,感谢楼主。
又学到新东西
redpop 2004-10-18
  • 打赏
  • 举报
回复
CreateChildControls() 是作什么的
vipxch 2004-10-17
  • 打赏
  • 举报
回复
╭═══╮ ╭═══╮ ╭══════╮   
╰╮ ╭╯ ╰╮ ╭╯ ╰╮ ╭══╮╰╮  
 ║ ║   ║ ║   ║ ║  ╰╮╰╮ 
 ║ ║   ║ ║   ║ ║   ║ ║ 
 ║ ║   ║ ║   ║ ║  ╭╯╭╯ 
 ║ ║   ║ ║   ║ ╰══╯╭╯  
 ║ ║   ║ ║   ║ ╭═══╯   
 ║ ║   ║ ║   ║ ║       
 ╰╮╰╮ ╭╯╭╯   ║ ║       
  ╰╮╰═╯╭╯   ╭╯ ╰╮      
   ╰═══╯    ╰═══╯
billrobin 2004-10-16
  • 打赏
  • 举报
回复
╭═══╮ ╭═══╮ ╭══════╮   
╰╮ ╭╯ ╰╮ ╭╯ ╰╮ ╭══╮╰╮  
 ║ ║   ║ ║   ║ ║  ╰╮╰╮ 
 ║ ║   ║ ║   ║ ║   ║ ║ 
 ║ ║   ║ ║   ║ ║  ╭╯╭╯ 
 ║ ║   ║ ║   ║ ╰══╯╭╯  
 ║ ║   ║ ║   ║ ╭═══╯   
 ║ ║   ║ ║   ║ ║       
 ╰╮╰╮ ╭╯╭╯   ║ ║       
  ╰╮╰═╯╭╯   ╭╯ ╰╮      
   ╰═══╯    ╰═══╯

加载更多回复(31)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧