CLR: .Net / Mono / Boo / Otros CLR > C#

 Problemas Static C#

(1/2) > >>

Neopro:
Estoy desarrollando una aplicacion, donde se comunican varios Form y clases entre ellos. Para eso es necesario declarar funciones del tipo "static" para poder accederlas desde las otras clases y forms.

Todo va bien, hasta que declaro algun windows.Forms de forma "Static". Al generar, algunas veces se me borraron parte de estos códigos en el Form.Designer y cuando los ingresaba de forma manual, y funcionaba bien, pero por ejemplo, tengo textbox, button y label que cuando los modifico desde otra clase simplemente no responden(ademas de borrarse del diseñador), por ejemplo:

Form.label.Enabled = true; En un form

Y en la clase  Form.label.Enabled = false;

Pero funciona unas 3 veces y despues no lo vuelve a ejecutar.

Que podrá ser?, hay alguna alternativa a los miembros static?.

Pense en funciones, pero las static no permiten el trabajo de la siguiente manera:

this.label.Enabled = true;

Que hago?

Gracias.

JuanK:
Lo primero es que usar una clase con miembros static nada mas para comunicar datos e una clase a otra evidencia una falencia de diseño en tu aplicación asi que lo primero que hay que hacer es replantear la forma en que estas abordando las cosas.

Lo segundo es que si lo que vas a hacer es comunicación entre aplicaciones ( o digamos entre procesos) mas que comunicación entre clases lo ideal es que uses los miembros del namespace System.Remoting.

Neopro:
De que otra forma puedo abordar el problema, hay alguna alternativa a los static?

JuanK:
Claro,
en condiciones ideales - normales debes manejar referencias a los objetos, es decir si el objeto uno es:


--- Código: Text ---class A{    public TextBox t;    ...    ...} class B{    public TextBox tRemoto;    ...    ...} ......A objetoA = new A();B objetoB = new B(); objetoB.tRemoto = objetoA.t; 

En un caso mucho mas elaborado y funcional, puedes montar un esquema con base a registro y uso de servicios, para lo cual mi recomendacion es que crees una clase que funcione a manera de Service Provider y que tenga metodos para obtener el servicio que buscas:


--- Código: Text ---static class ServiceProvider{    //Algun tipo de dato diccionario o una implementación tuya para tal fin    ArrayListIndexed servicios;     public static object GetService(string tipoServicio)    {          if(tipoServicio == "TextBoxA")              return Servicios["TextBoxA"];     }         public static void RegisterService(string tipoServicio, object service)    {            servicios.Add(tipoServicio, service);     }        ...    ...}   class A{    public TextBox t;    ...    ...} class B{    public TextBox tRemoto;    ...    ...    tRemoto = (TextBox)ServiceProvider.GetService("TextBoxA");} ......  
Puedes hacerlo tan complejo y funcional como lo requieras o tengas tiempo para hacerlo, incluso una implementación mas compleja podría usar Generics en los metodos etc.

Neopro:
Es que el problema no es tan asi...

Por ejemplo:

class A //Con esto me refiero a otro archivo del mismo programa
{
   public TextBox t;
   ...
   ...
}

class B //Desde aca asignarle un valor a t
{
   t.text = "Soy otra clase en otro archivo.cs dentro del mismo proyecto.";
   ...
   ...
}

Eso es lo que quiero hacer y por eso uso miembros static

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa