problemas al actualizar progressbar desde clase

13/12/2005 - 15:08 por ROLANDOCC | Informe spam
saludos, tengo un formulario con una progressbar, tengo una clase que es la
que maneja los datos y realza actualizaciones,
mi problema es que no puedo accesar la progressbar desde la clase,
simplemente no la veo, supongo que por ser un control, entonces declaré
dentro de la forma una variable de su mismo tipo, asi:

public static frm_principal PFrm_Principal=new frm_principal();

ademas declaré un metodo que es el que realiza el
PerformStep()

así si puedo accesar este metodo a travez de la variable de tipo frm_principal
y en teoria actualizarme la barra, el problema es que no lo hace, no da
ningun error, simplemente no me modifica la barra de progreso, que puedo
hacer para actualizar una barra de progreso que está dentro de una forma pero
desde una clase???

gracias.


Saludos desde Costa Rica! : )

DISCLAIMER: «Este mensaje se proporciona "como está" sin garantías de
ninguna indole, y no otorga ningún derecho.»

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
13/12/2005 - 16:50 | Informe spam
El problema es que estas creando una nueva instancia del formulario en lugar
de usar el que ya esta creado. En lugar de hace new frm_principal() pasale
la instancia del formulario en el constructor de la clase:

public frm_principal PFrm_Principal;

MiClase(frm_principal form) {
PFrm_Principal = form;
}

Aunque esto tiene el problema de hacer demasiado dependiente la clase del
formulario. Mejor seria que notificaras al formulario (o cualquier otro
objeto que use la clase) mediante un evento.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#2 ROLANDOCC
13/12/2005 - 17:10 | Informe spam
gracias,
he tratado de hacerlo con eventos, pero no encuentro la forma de hacerlo
entre un formulario y una clase...

Saludos desde Costa Rica! : )

DISCLAIMER: «Este mensaje se proporciona "como está" sin garantías de
ninguna indole, y no otorga ningún derecho.»




"Eduardo A. Morcillo [MS MVP VB]" escribió:

El problema es que estas creando una nueva instancia del formulario en lugar
de usar el que ya esta creado. En lugar de hace new frm_principal() pasale
la instancia del formulario en el constructor de la clase:

public frm_principal PFrm_Principal;

MiClase(frm_principal form) {
PFrm_Principal = form;
}

Aunque esto tiene el problema de hacer demasiado dependiente la clase del
formulario. Mejor seria que notificaras al formulario (o cualquier otro
objeto que use la clase) mediante un evento.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C



Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
13/12/2005 - 18:31 | Informe spam
Es muy simple. Primero creas un delegado para el evento:

public delegate void ProgresoEventHandler(object sender, int progreso);

Despues defines el evento en la clase:

public event ProgresoEventHandler Progreso;

Y lo llamas cuando quieras lanzar el evento:

void HacerAlgo() {

for(int i = 0; i < 100; i++) {

// hacer algo

if (Progreso != null) // importante chequear si es != de null
Progreso(this, i);

}

En el formulario simplemente debes crear un delegado y conectarlo al evento
cuando creas una instancia de la clase:

void ActualizarProgreso(object sender, int progreso) {
// mostrar progreso en el formulario
}


MiClase obj = new MiClase();

obj.Progreso += new ProgresoEventHandler(ActualizarProgreso);
obj.HacerAlgo();


Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#4 ROLANDOCC
13/12/2005 - 19:06 | Informe spam
wow!!!
por fin entiendo un poco esto de los delegados y de los eventos , me parece
excelente tu ejemplo,
ya lo había hecho de la otra forma, con la variable public static
y me funcionaba de maravilla, pero claro, siempre se debe aprender algo
nuevo cada dia.

solo me queda una duda, porque preguntar

if (Progreso != null) // importante chequear si es != de null
Progreso();


MUCHAS GRACIAS!!!

Saludos desde Costa Rica! : )

DISCLAIMER: «Este mensaje se proporciona "como está" sin garantías de
ninguna indole, y no otorga ningún derecho.»




"ROLANDOCC" wrote:

gracias,
he tratado de hacerlo con eventos, pero no encuentro la forma de hacerlo
entre un formulario y una clase...

Saludos desde Costa Rica! : )

DISCLAIMER: «Este mensaje se proporciona "como está" sin garantías de
ninguna indole, y no otorga ningún derecho.»




"Eduardo A. Morcillo [MS MVP VB]" escribió:

> El problema es que estas creando una nueva instancia del formulario en lugar
> de usar el que ya esta creado. En lugar de hace new frm_principal() pasale
> la instancia del formulario en el constructor de la clase:
>
> public frm_principal PFrm_Principal;
>
> MiClase(frm_principal form) {
> PFrm_Principal = form;
> }
>
> Aunque esto tiene el problema de hacer demasiado dependiente la clase del
> formulario. Mejor seria que notificaras al formulario (o cualquier otro
> objeto que use la clase) mediante un evento.
>
> Eduardo A. Morcillo [MS MVP VB]
> http://www.mvps.org/emorcillo
> http://mvp.support.microsoft.com/pr...4EF5A4191C
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida