Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/10/2006, 08:37
Stream
 
Fecha de Ingreso: mayo-2004
Ubicación: Guadalajara, Jalisco, México
Mensajes: 724
Antigüedad: 20 años
Puntos: 6
Eventos en Aplicaciones Windows, Que tecnica utilizas??

Bueno, abro este post para que sirva de alguna manera...

Por poner un ejemplo...

Bueno es referente a que programas para windows (windows forms) surgen muchos problemas con los eventos es decir... por ejemplo: tienes un combobox que deve llenarse de datos y cuando le pones el .DataSource el control empieza a meter los datos pero al mismo tiempo se ejecuta su evento selectedIndexchanged que a su ves requiere del valor seleccionado del mismo combo para llenar datos en otro combo, al llenar los datos del otro combo tambien a este se le ejecuta el selectedIndexChanged que a su ves tal combo llena los datos de un datagridview que a su vez, al llenarse de datagridview se ejecuta el evento SelectionChanged... y blah blah...

Es decir... tratar de llenar datos, se ejecutan una serie de eventos que pueden probocar que nuestro codigo truene!!

Bueno, la tecnica que uso yo para arreglar este problema es, quitar el manejador (System.EventHandler) a los controles antes de ponerles el .DataSource, para asegurar que se llenen de datos sin que se disparen los eventos que hayamos implementado...

es decir:
Si tengo un combobox, y cuando le pongo .Datasource, es decir..

cmbProductos.DisplayMember = "Nombre";
cmbProductos.ValueMember = "IdProducto";
cmbProductos.DataSource = mids.tables("Productos");

Al hacer esto, se ejecuta el cmbProductos_SelectedIndexChanged automatico,.. pero yo no quiero que se ejecute en este momento por que yo solo quiero meter datos y ya!!!

Entonces, quitamos el manejador.. (-=)

cmbProductos.DisplayMember = "Nombre";
cmbProductos.ValueMember = "IdProducto";

//Quitamos el manejador de eventos...

this.cmbProductos.SelectedIndexChanged -= new System.EventHandler(this.cmbProductos_SelectedInde xChanged);

cmbProductos.DataSource = mids.tables("Productos");

//Y respues lo restauramos

this.cmbProductos.SelectedIndexChanged += new System.EventHandler(this.cmbProductos_SelectedInde xChanged);

Por cierto, aqui se ve muy rustico el quitar y agregar el manejador.. yo suelo poner rutinas como RemoveHandler_cmbProductos() y AddHandler_cmbProductos() en las cuales pondria lo de this.cmbProductos.SelectedIndexChanged -= new System.EventHandler(this.cmbProductos_SelectedInde xChanged);
y this.cmbProductos.SelectedIndexChanged += new System.EventHandler(this.cmbProductos_SelectedInde xChanged);

Bueno... creo que esta tecnica es buena, me ha ayudado a resolver el problema de los eventos que se disparan en cadena..

pues me gustaria saber su alguien utiliza una tecnica diferente a esta...
espero sus comentarios...

saludos