【发布时间】:2014-01-23 18:19:21
【问题描述】:
以下三个 ImageButton 被添加到页面代码隐藏中的面板 (pBreakfast):
ImageButton ibSR = new ImageButton();
ibSR.ID = "ibStickyRoll";
ibSR.ImageUrl = "/images/Breakfast.gif";
ibSR.Click += new ImageClickEventHandler(ImageButton_Click);
pBreakfast.Controls.Add(ibSR);
ImageButton ibD = new ImageButton();
ibD.ID = "ibDoughnut";
ibD.ImageUrl = "/images/Breakfast.gif";
ibD.Click += new ImageClickEventHandler(ImageButton_Click);
pBreakfast.Controls.Add(ibD);
ibD.Dispose();
using(ImageButton ibC = new ImageButton()){
ibC.ID = "ibCrepe";
ibC.ImageUrl = "/images/Breakfast.gif";
ibC.Click += new ImageClickEventHandler(ImageButton_Click);
pBreakfast.Controls.Add(ibC);
}
我希望这三个都可以工作,或者处置的 ImageButtons 会产生错误或根本不出现。但是发生的事情是所有三个都出现并且不会导致任何错误,但是事件处理程序永远不会为已释放的 ImageButton 触发。
为什么处置只导致事件处理程序连接消失?
我正在将 TableRow 和 TableCell 动态添加到同一页面上的表格中,并将 ImageButtons 放置在每一行的一个单元格中。我正在使用 TableRow 和 TableCell 的“使用”,没有任何问题。处理外部(TableRow 和 TableCell)对象似乎没有问题;只要我不处理动态 ImageButtons,事件处理程序就会在点击时触发 OK。
在这种情况下,永远不要处理 ImageButtons 可以吗?我已将 StackOverflow 的建议牢记在心,并尝试在我所有的一次性对象上使用 using() —— 所以这真的让我很烦恼。
谢谢!
【问题讨论】:
标签: c# asp.net code-behind dispose