如何使用用户控件里面的控件

jiangtianyin 2009-12-24 10:31:44
今天是平安夜,首先在这里祝福大家平安夜快乐!!!!!!!!!!

我自己做了一个用户控件JobExpress.ascx(用来保存用户的工作经历),假设代码如下:
<table>
<tr>
<td>公司:</td>
<td><asp:TextBox id="Company" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>职务:</td>
<td><asp:TextBox id="Duty" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td colspan="2" style="text-align:right"><asp:Button id="DeleteControl" runat="server" /></td>
</tr>
</table>

在用户简历页面Resume.aspx中动态的添加上面定义的用户控件,添加功能已经实现.在上面的用户控件中本身含有一个Button ,其id为DeleteControl,现在我想通过这个按钮来删除包含该Button的用户控件,但是我在Resume.aspx中无法使用到用户控件里面的Button,刚才在网上查了很久,有人说要公开用户控件里面的Button,即在JobExpress.ascx.cs中添加如下代码:public System.Web.UI.WebControls.Button DeleteControl;但是改了之后就报错:JobExpress中已经包含DeleteControl的定义
这种用户控件里面的控件到底可不可以公开,使得调用用户控件的页面可以访问它?

如何为Button添加事件,使得它可以实现我要的功能(通过这个按钮来删除包含该Button的用户控件),是在ascx.cs中添加事件,还是在调用它的页面中添加?
我在网上查到一种方法:在Resume.aspx.cs中添加:
JobExpress job = (JobExpress)Page.LoadControl("JobExpress.ascx")
job.DeleteControl.Click +=new EventHandler(DeleteControl_Click); //DeleteControl_Click为删除控件的方法
但是问题正如前面所说,通过job这个用户控件实例无法找到里面的DeleteControl

问题说得有点罗嗦了,总之就是要删除动态添加的用户控件,那位高手可以讲解一下,最好能给个例子(使用C#)
再次祝大家平安夜快乐,顺便预祝圣诞快乐!!!!!!
...全文
259 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangtianyin 2009-12-29
  • 打赏
  • 举报
回复
自己找到错误了,页面上放的是ImageButton而不是Button
jiangtianyin 2009-12-25
  • 打赏
  • 举报
回复
三楼的朋友public Button DelButton{get{return DeleteControl;}} 这句有问题,好像会造成死循环

我想二楼的兄弟那样做了:
public Button inneButton
{
get
{
return DeleteControl;
}
}
WebUserControl1.inneButton.Click+=new EventHandler(inneButton_Click);
但在这里提示:错误:“JobExpress”并不包含“inneButton”的定义 ,这是怎么回事呢?
jiangtianyin 2009-12-25
  • 打赏
  • 举报
回复
刚才发的不完全是我的,有些地方没有修改,还是刚才那个问题
最开始我的代码是
JobExpress.ascx.cs中有:
public Button DeleteControl
{
get
{
return DeleteControl;//这是用户控件中的按钮
}
}
Resume.aspx.cs:
JobExpress ctr = (JobExpress)LoadControl("JobExpress.ascx");
ctr.DeleteControl.Click+=new EventHandler(DeleteControl_Click);

后来调试发现会造成死循环,所以改为如下代码:
我在JobExpress.ascx.cs中有:
public Button btnDeleteControl
{
get
{
return DeleteControl;//这是用户控件中的按钮
}
}
然后再CreateControl()方法中
JobExpress ctr = (JobExpress)LoadControl("JobExpress.ascx");
ctr.btnDeleteControl.Click+=new EventHandler(btnDeleteControl_Click);
错误如下:错误 4 当前上下文中不存在名称“DeleteControl”

没修改之前JobExpress能被识别(变成绿色了的),改后好像识别不出来了,是黑色,我确保aspx.cs中已经没有DeleteControl了,然后我在改成原来的样子又可以识别了(又变成绿色),但原来的写法会造成死循环,为什么修改之后会有这种错误呢?
HarveyYan 2009-12-24
  • 打赏
  • 举报
回复
HI
建议通过属性来暴露用户控件的Button:
public Button DelButton{get{return DeleteControl;}}

之后就可以像你所说的那样为用户控件注册事件委托了:
我在网上查到一种方法:在Resume.aspx.cs中添加:
JobExpress job = (JobExpress)Page.LoadControl("JobExpress.ascx")
job.DelButton.Click +=new EventHandler(DelButton_Click); //DeleteControl_Click为删除控件的方法
koukoujiayi 2009-12-24
  • 打赏
  • 举报
回复
没怎么看懂!!
如果apsx页面要调用用户控件中的Button的click事件,可这样:
在用户控件JobExpress.ascx文件代码中添加一个get属性:
public Button inneButton
{
get
{
return DeleteControl;
}
}

在aspx页面加入用户控件中Button事件的委托及对应调用的方法,
这样按了用户控件中Button的click事件,现在是在页面的inneButton_Click方法中:

protected void Page_Load(object sender, EventArgs e)
{
WebUserControl1.inneButton.Click+=new EventHandler(inneButton_Click);
}

private void inneButton_Click(object sender, EventArgs e)
{
//对应用户控件中Button的click事件
}

其中WebUserControl1是用户控件名.


wuyq11 2009-12-24
  • 打赏
  • 举报
回复
public event EventHandler A;
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
if (A!= null)
{
A(this, new EventArgs());

}

}


Button bt = (Button)WebUserControl1.FindControl("Button1");
WebUserControl1.a+= new EventHandler(show);
protected void show(object sender, EventArgs e)
{
}



62,254

社区成员

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

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

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

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