2016-10-22 80 views
0

我的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"); 
    } 

我甚至嘗試在用戶控件本身添加雙擊單擊事件,甚至沒有被解僱。

任何幫助,這是高度讚賞。

回答

0

當您使用動態創建的控件時,您必須重新添加控件不遲於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事件之前添加事件。還有什麼可以做的事情來觸發事件? –

相關問題