[Résolu][ASPX][C#] Création dynamique d'un control et évènement

Création dynamique d'un control et évènement [Résolu][ASPX][C#] - ASP - Programmation

Marsh Posté le 13-12-2004 à 09:04:05    

Bonjour la Cie,  :)  
 
j'ai le problème suivant :
 
Je dois créer dynamiquement des ImageButton qui seront affichés dans un tableau.  
Pour chaque bouton, j'associe une méthode générique sur l'évènement Click. Le problème est que quand je clique sur un dès bouton l'évènement OnClick ne se déclenche jamais.
 
J'ai retourné le problème dans tous les sens, rien n'y fait  :??:


Message édité par tafkap le 14-12-2004 à 00:05:36
Reply

Marsh Posté le 13-12-2004 à 09:04:05   

Reply

Marsh Posté le 13-12-2004 à 12:06:29    

t'as rattaché un delegate à chaque bouton ?

Reply

Marsh Posté le 13-12-2004 à 14:31:03    

Salut,
 
je fais ça :
 
for (int i=0;i<=myTable.Rows.Count-1;i++)
{
  myIEventBtn mbutton = new myIEventBtn();
  mbutton.ID = "IDbtn_" + i.ToString();
  mbutton.EnableViewState = false;
  mbutton.ImageUrl = ".\\images\\icones\\supprimer2.gif";
  mbutton.Attributes["runat"] = "server";
  mbutton.BubbleClick += new EventHandler(mbutton_BubbleClick);
 mListButtons.Add(mbutton);
 }

Reply

Marsh Posté le 13-12-2004 à 17:08:53    

c'est quoi cet évènement BubbleClick ?
 
ce genre de truc

Code :
  1. public void mbutton_Click(Object sender, System.EventArgs e)
  2. {
  3.    MessageBox.Show("Bouton :" + ((System.Windows.Forms.Button)sender).Tag.ToString());
  4. }
  5. (...)
  6. mbutton.Click += new EventHandler(mbutton_Click);


ne fonctionne pas ?

Reply

Marsh Posté le 13-12-2004 à 17:24:54    

Hello ;)
 
tout d'abord merci pour ton aide.
 
En cherchant sur le Net j'ai trouvé la phrase qui m'intéresse :
 
"Note When you create dynamic controls on a Web Form, the controls must be created and added to the controls collection either in the OnInit or in the Page_Load events. Otherwise, the controls behave unexpectedly."
 
J'ai refait un test basic et ça fonctionne :  
 
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
 
namespace DynamicControl
{
 /// <summary>
 /// Description résumée de WebForm1.
 /// </summary>
 public class WebForm1 : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.Label Label1;
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // Placer ici le code utilisateur pour initialiser la page
   for(int i=0;i<=1;i++)
   {
    ImageButton nImg = new ImageButton();
    nImg.ID = "ID" + i.ToString();
    nImg.Click +=new ImageClickEventHandler(nImg_Click);
 
    Control myControl = this.FindControl("Form1" );
    myControl.Controls.Add(nImg);
   }
  }
 
  #region Code généré par le Concepteur Web Form
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN : Cet appel est requis par le Concepteur Web Form ASP.NET.
   //
   InitializeComponent();
   base.OnInit(e);
  }
   
  /// <summary>
  /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
  /// le contenu de cette méthode avec l'éditeur de code.
  /// </summary>
  private void InitializeComponent()
  {    
   this.Load += new System.EventHandler(this.Page_Load);
 
  }
  #endregion
 
  private void nImg_Click(object sender, ImageClickEventArgs e)
  {
   ImageButton mysender = (ImageButton) sender;
   Label1.Text = mysender.ID;
  }
 }
}
 
 
Je dois donc me repencher sur la structure de ma page, mais il me semble que je faisais la création dynamique sur le OnInit, je regarde.


Message édité par tafkap le 13-12-2004 à 17:28:28
Reply

Marsh Posté le 14-12-2004 à 00:05:07    

Finalement c'était bien cela, il faut que les controls server soient créés dans l'évènement Init ou Load.
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed