Hola que tal ante todo quiero dale las gracias a los panas
kayfaxx, Dradi7 y erick_arcini.
con respecto a sus respuesta me fueron de mucha ayuda sin embargo probando y aceptando sus sugerencias:
a) en cuanto a SystemCollection, herencia y transportar la clase-objeto a cada form (erick_arcini)
b) en cuanto a usar clase publica y static (Dradi7)
he intentado es lo siguiente:
manejar 3 clases en un fichero aparte (ej: misClases.cs)
donde su logica es la siguiente:
1-se crea una clase llamada "Equipo" la cual contiene parametros/variables de cada equipo
2-se crea una clase de coleccion de equipos (Collection Objects) usando una propiedad de NetFrameWork System.Collections.CollectionBase la cual hereda las propiedades-metodos de la clase "Equipo"
3-se crea una clase maestra publica (bueno una clase mas pero quise llamarla asi para que se entienda que engloba a otras) llamada "CEquipos" que contiene una coleccion de equipos internamente y que permite acceder a las propiedades de ellos
--codigo del fichero miClases.cs -----------------------------------------
//clase equipo
public class equipo
{
//variables internas
private string _Nombre;
//procedimientos o parametros publicos
public string nombre
{
get { return _Nombre; }
set { _Nombre = value; }
}
}
//clase de tipo Collection que hereda las propiedades-metodos de la clase "equipo"
//usa la tecnica de Herencia de la P.O.O (programacion orientada a objetos)
public class CollectionEquipos : System.Collections.CollectionBase
{
private int CantEquipos; //varaible que guarda la cantidad de equipos de la coleccion
//propiedades
public void addEquipo(equipo objEquipo)
{
CantEquipos++; //incrementa la cantidad de equipos
//asigna el nombre predeterminado del nuevo equipo creado
objEquipo.nombre = "equipo" + CantEquipos;
this.List.Add(objEquipo); //agrega un nuevo objeto de tipo equipo a la coleccion
}
public void removeEquipo(int equipoNum)
{
//verifica si el equipo a remover es valido en la coleccion
if (equipoNum <= Count - 1 || equipoNum >= 0)
{
this.List.RemoveAt(equipoNum); //elimina el equipo de la coleccion
}
}
public int cantidadEquipos()
{
return this.CantEquipos; //devuelve la cantidad de equipos de la coleccion
}
//para acceder internamente a un item de la coleccion
//es igual a cuando usamos: miobjeto[X].propiedad
public equipo this[int equipoNum]
{
//retorna el objeto padre (en este caso la clase "equipo")
get { return ((equipo)(this.List[equipoNum])); }
//asigna
set { this.List[equipoNum] = value; }
}
}
//clase Maestra "CEquipo" que contiene una coleccion de "equipos"
public class CEquipos
{
CollectionEquipos objCollection = null; //crea ub objeto Collection
//constructor (publico)
public CEquipos()
{
objCollection = new CollectionEquipos(); //crea una coleccion de equipos
}
//devuelve la coleccion de equipos
public CollectionEquipos Equipo
{
get { return this.objCollection; }
}
}
-fin fichero-------------------------------
bien espero que hasta este punto se entienda, ahora vamos a los forms
para formMain que es el formulario principal, en el creo una instancia de la clase maestra "CEquipos" asi:
//crea un objeto de Equipos tipo estatico (privado)
private static CEquipos objEquipos = new CEquipos();
//para que el objeto sea accedido en otros forms
public static CEquipos getEquipos()
{
return objEquipos;
}
Nota: si se preguntan xq getEquipos() ?? es bueno para que el objeto creado en este form pueda ser usado en otros forms (esta funcion publica de tipo "CEquipos" permite exportar el objeto de forma global para otros forms)
ok ahora (todavia sigo en frmMain ojo!!) en mi funcion Load() creo 3 equipos y los asocio a la coleccion de "CEquipos"
//cuando inicia el formulario
private void Form1_Load(object sender, EventArgs e)
{
//agrego 3 equipos a objetoEquipos
objEquipos.Equipo.addEquipo(new equipo());
objEquipos.Equipo.addEquipo(new equipo());
objEquipos.Equipo.addEquipo(new equipo());
//imprimo la cantidad de equipos
Debug.WriteLine("Se han creado "+objEquipos.Equipo.cantidadEquipos()+" equipo(s)");
}
adicionalmente este form permite llamar a otro form por lo cual tiene un boton que muestra otro form (y en este otro form es donde voy a modificar algunos valores de la coleccion de equipos)
//cuando hace clic en el boton nuevoForm
private void btnNuevoForm_Click(object sender, EventArgs e)
{
//recorro antes de llamar el nuevo form la coleccion y muestro en pantalla que contiene esa coleccion
foreach (equipo objEquipo in objEquipos.Equipo)
{
Debug.WriteLine("ANTES del nuevo form="+ objEquipo.nombre);
}
//llama a un nuevo form
frm_equipos frmEquipos = new frm_equipos();
frmEquipos.ShowDialog(this);
//ahora despues de que cierre el form2 (frm_equipos) se comprueban si la coleccion de equipos sufrio cambios, para ello vuelvo a recorrer la coleccion
foreach (equipo objEquipo in objEquipos.Equipo)
{
Debug.WriteLine("DESPUES del nuevo form=" + objEquipo.nombre);
}
}
con esto termina la codificacion en frmMain....
ahora en form2 (que lo llame frm_equipos) cuando inicia en su propiedad Load() este modifica los datos SOLO!! del equipo1, mientras que los equipos 2 y 3 se mantienen iguales, su codigo:
//cuando inicia el formulario
private void frm_equipos_Load(object sender, EventArgs e)
{
//crea un objeto local pero asigna a este el objeto que fue creado en (formMain), deberia ser esto una especie de herencia local!!
CEquipos objEquipoLocal = frm_main.getEquipos();
//ahora cambia la propiedad de uno de ellos
objEquipoLocal.Equipo[0].nombre = "equipo1 MODIFICADO EN FORM2";
}
como se puede observar lo que hice aqui fue asignar a un objeto local otro objeto creado e instanciado en frmMain, y a este objeto local lo trabajo en su coleccion: equipo[0] que viene a ser un equipo asignado a la clase Collection Objects con lo cual puedo manipularlo como quiera dentro de este form y otros foms tambien.
Bueno por ultimo esta la salida del programa cuando lo ejecute:
Se han creado 3 equipo(s)
ANTES del nuevo form=equipo1
ANTES del nuevo form=equipo2
ANTES del nuevo form=equipo3
##aqui fue cuando se llamo a form2 y se hizo el cambio, luego se cerro el form2 y devolvio esto en frmMain:
DESPUES del nuevo form=equipo1 MODIFICADO EN FORM2
DESPUES del nuevo form=equipo2
DESPUES del nuevo form=equipo3
como se puede apreciar la coleccion solo sufrio cambios en equipo1 mientras que los otros se mantienen iguales y disponibles para futuras modificaciones en el programa.
Bueno con esto considero que es la mejor respuesta a mi propia pregunta sin embargo le agradezco mucho su colaboracion panas!! ya que bueno ahora si puedo seguir trabajando en mi proyecto...
Por ultimo les pido o les invito a ustedes y a cualquier otro que vea este post a que realice una prueba y si pueden plantear otros metodos o soluciones mucho mas simples basado en lenguaje c#
cualquier cosa no duden en avisarme e iguao yo seguire en contacto en este foro.
Gracias y saludos...