WebForm中的动态添加控件不会触发事件
我的C#Web表单上有一个用户控件。该控件由另一个Activex控件组成。用户控件正在动态添加到表单中。我为用户控件的每个动态添加实例添加了双击事件。然而,双击甚至没有被解雇。下面是我的代码WebForm中的动态添加控件不会触发事件
int a = 0;
int b = 0;
int i, j;
int[,] Matrica;
Matrica = new int[n, m];
for (i = 0; i < n; i++)
{
a = merlokacionin.X + 5;
for (j = 0; j < m; j++)
{
textbox[i, j] = new UserCont();
textbox[i, j].Location = new Point(a, b)
panel3.Controls.Add(textbox[i, j])
textbox[i, j].DoubleClick += new System.EventHandler(dicom_DoubleClick);
a = a + 105;
}
b = b + 105;
}
private void dicom_DoubleClick(object sender, System.EventArgs e)
{
MessageBox.Show("do something here");
}
//I have also tried;
int a = 0;
int b = 0;
int i, j;
int[,] Matrica;
Matrica = new int[n, m];
for (i = 0; i < n; i++)
{
a = merlokacionin.X + 5;
for (j = 0; j < m; j++)
{
textbox[i, j] = new UserCont();
textbox[i, j].Location = new Point(a, b)
panel3.Controls.Add(textbox[i, j])
textbox[i, j].DoubleClick += new System.EventHandler(dicom_DoubleClick);
a = a + 105;
}
b = b + 105;
}
private void dicom_DoubleClick(object sender, System.EventArgs e)
{
MessageBox.Show("do something here");
}
我甚至尝试在用户控件本身添加双击单击事件,甚至没有被解雇。
任何帮助,这是高度赞赏。
当您使用动态创建的控件时,您必须重新添加控件不迟于比Page_Load
方法。否则,事件处理程序将不会“重新连接”,也不会为控件恢复视图状态。
在OnInit
期间重新创建控件是页面生命周期中的“正确”位置。虽然最终结果是相同的,但在Page_Load
期间重新创建控件会强制页面“赶上”。
如果您可以从您的页面提供相关的代码,我可以为您提供实施。否则,只需重新创建上面详述的动态控件。
编辑
还有什么可以做,火起来的事件?
简答题?不,没有。你受到asp.net页面生命周期的约束。如果您不重新创建如上所述的控件,则无法连接按钮的单击事件。
这里的技巧是跟踪您创建的控件动态,所以您可以在Page_Init
期间恢复它们。你可以使用ViewState来做到这一点。当您在按钮单击事件上添加控件时,添加将该控件重新创建到页面视图状态所需的信息。
A的这些原则很好的讨论可以在这里找到:Manage Dynamically Created Controls - Take advantage of automatic state maintenance for dynamic controls.
要跟踪动态创建的控件,您必须使用持久性数据存储,如视图状态。您可以使用一个简单的技巧,包括在创建动态控件时向页面的视图状态添加一些信息。添加到视图状态的语法和语义完全取决于您。
谢谢。该控件被添加到按钮单击,所以我不可能在Form_Load事件之前添加事件。还有什么可以做的事情来触发事件? –