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.

要跟踪动态创建的控件,您必须使用持久性数据存储,如视图状态。您可以使用一个简单的技巧,包括在创建动态控件时向页面的视图状态添加一些信息。添加到视图状态的语法和语义完全取决于您。

+0

谢谢。该控件被添加到按钮单击,所以我不可能在Form_Load事件之前添加事件。还有什么可以做的事情来触发事件? –