Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - [D4N93R]

#1131
.NET (C#, VB.NET, ASP) / Re: SmartDll.dll
22 Julio 2010, 05:56 AM
Si bueno, una vez que lo comprendas no es nada difícil :D

Usando el código anterior, supongamos que mi aplicación es un notepad, normal igualito que el de windows.

entonces, en vez de programar el comportamiento en Form1.cs xD lo programas todo en AplicationManager, un pequeño ejemplo:

Nota: Código sin Visual Studio.
Código (csharp) [Seleccionar]

public class Form1: Form
{

  void Guardar_Click(object sender, EventHandler e)
  {
      //este es el método que maneja el evento click del botón guardar del formulario.
      // En vez de hacer todo el código para guardar acá, haces:
      AplicationManager.SaveDocument(textbox1.Text);
      //ves? de esta manera todo el comportamiento de la aplicación ya no se hace en el form1 :D
  }

}


Ahora un sistema de plugins en el mismo código. Un plugin que saque un botón y muestre un formulario para ver las actualizaciones disponibles, y que también al cargar revise si hay actualizaciones
Código (csharp) [Seleccionar]

//para esto necesitamos que nuestro AplicationManager tenga acceso a todo, por eso:
//otra cosa! los plugines están en AplicationManager, en una Lista, algo así List<IPlugin>
// Y siempre son cargados antes de iniciar el formulario, esto lo haces en el Program.cs
public class Form1: Form
{

  void Form_Load(object sender, EventHandler e)
  {
      AplicationManager.Current.MainForm = this;

     // Obviamente en el AplicationManager tiene que haber una propiedad de tipo Form que se llame MainForm :D


  }
  void Guardar_Click(object sender, EventHandler e)
  {
      AplicationManager.Current.SaveDocument(textbox1.Text);
  }

}


Es muy importate que tengas eventos y métodos por todo el AplicationManager, de esta forma puedes hacer más cosas con los plugines.

Ahora el código de los plugines:

Código (csharp) [Seleccionar]

public class UpdatePlugin : IPlugin
{
  AplicationManager m_appMgr;
  public void Update()
  {
     //Código para actualizar la aplicación
  }
  void Init(AplicationManager appManager)
  {
      m_appMgr = appManager;
      Update(); //Este método se llama cuando se inicia la apliación porque al cargar los plugines se les debe llamar a éste método, o si quieres lo ahces en el constructor.

     //ahora agarramos el form de AplicationManager y buscamos el Menu donde queremos meter el control y listo:
     AplicationManager.Current.MainForm.FindControl(..... // ahí te lo dejo, tengo sueño ya hehehe
     //también puedes crear un método para agregar botones a un menu en específico, eso lo pondrías en el Application manager.. pero bueno es cuestión de programar y añadir detalles..
  }
  void OnExit()
  {  }
  public string Name {get { return "Updates Plugin" } }
 
}
#1132
[TROLL]Exacto Programar como se debe: programar en C# [/TROLL]
#1133
Cita de: seba123neo en 22 Julio 2010, 01:12 AM
si le pones As New TimeSpan no soporta que despues le hagas una asignación, y se lo tenes que hacer en otra linea.

Cita de: Keyen Night en 22 Julio 2010, 01:10 AM
El .Net hace transformaciones de tipos automaticamente e inicializa los objetos automaticamente tambien .Net es un lenguaje simple, comodo y muy visual lo que le falta es potencia :-\

potencia en que sentido?

Es que no es asignación es simplemente un parametro en el constructor.xD LOL no lo había visto, pero gracias por aclarar lo de la asignación,.
#1134
Código (vbnet) [Seleccionar]

Dim vDiferencia As TimeSpan = fechafinal - fechaInicial


:o NO sabía que VB hacía eso :D hohohohoh

PD, no le falta el New? ya ni se xD
#1135
No sabía que lo hacías en VB.Net

Uhmm no me acuerdo pero debe ser igual

Código (vbnet) [Seleccionar]

Dim fechaInicial as New DateTime(2009, 3, 2, 6, 20, 30)
Dim fechaInicial as New DateTime(2010, 6, 2, 6, 20, 30);
Dim result as New TimeSpan

result =  fechafinal - fechaInicial

MessageBox.Show(result.TotalDays);


PD: Corrijo mi post anterior porque tenía un error xD HHEHEHEHHEHEH
#1136
Código (csharp) [Seleccionar]

DateTime fechaInicial = new DateTime(2009, 3, 2, 6, 20, 30);
DateTime fechafinal   = new DateTime(2010, 6, 2, 6, 20, 30);

TimeSpan result = fechafinal - fechaInicial;

MessageBox.Show(result.TotalDays);


EDIT:

haha se me adelantó Keyen Night por 21 segundos haha :P sí exacto, podrás ver otros totales, revisa MSDN.
#1137
Restas B - A = X

X va a ser tipo TimeSpan. Los días los ves en X.TotalDays

Eso es todo :)
#1138
Acabo de usarlo, Excelente herramienta! 10/10!
#1139
.NET (C#, VB.NET, ASP) / Re: SmartDll.dll
21 Julio 2010, 20:11 PM
Excelente, y tranquilo que parece más difícil pero no lo es, tener un ApplicationManager o el nombre que le pongas es muy importante y te ayuda mucho en el desarrollo de aplicaciones grandes. Un dato:

Código (csharp) [Seleccionar]


public class AplicationManager
{
    private static AplicationManager m_appMgr = null;
    public static AplicationManager Current
    {
        get
        {
             if(m_appMgr == null)
                m_appMgr = new AplicationManager();
             return m_appMgr;
        }
     }

    // despues todo el codigo principal de la aplicacion
}



Con esto tienes :)
#1140
.NET (C#, VB.NET, ASP) / Re: SmartDll.dll
21 Julio 2010, 20:02 PM
Muy bien! pero (ups) yo creo que es mejor que crees un SDK para los plugines, más que un comprobador de manera de saber si está bien "redactado" el dll del plugin.

Me explico, Supongamos que tengo un programa (windows form) entonces quiero que se le añadan plugines, pero los plugines no solo son visuales, pueden ser muchas cosas más, por ejemplo cargar otra ventana o cierto comportamiento diferente.

Entonces tienes que proveer un sdk, que creo yo, debe consistir en una Interfaz. Sigamos con el ejemplo:

La interfaz:
Código (csharp) [Seleccionar]

public class AplicationManager
{
    // codigo principal de la aplicacion
    public static AplicationManager Current { get; }
}

public interface IPlugin
{
      void Init(AplicationManager appManager);
      void OnExit();
      public string Name {get; }
}


Entonces, AplicationManager es donde se maneja todo el comportamiento principal de la aplicación, y todo plugin debe implementar de IPlugin, así de esa manera:

Código (csharp) [Seleccionar]


public class MySuperPlugin : IPlugin
{
      private AplicationManager m_appMgr =  null;
      void Init(AplicationManager appManager)
      {
          m_appMgr = appManager;
          System.Timers.Timer aTimer = new System.Timers.Timer(10000);
          aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
          aTimer.Interval = 2000;
          aTimer.Enabled = true;
      }

      private static void OnTimedEvent(object source, ElapsedEventArgs e)
      {
          m_appMgr.Current.SomeMethod();
      }

      public void OnExit()
      {
           //supuestamente esto es un evento que se ejecuta cuando se está cerrando
           //lla aplicacion, como? pues AplicationManager tiene la lista de plugines
           //cargados, y los cierra uno por uno antes de salir
           appManager.Current.XXXXX.XXX = "TEST";
            // con esto quiero decir que tenemos acceso a la
           //aplicación principal  en cualquier momento:)
      }

      public string Name {get { return "My Super Plugin!!! v1.0"; } }
}



Si no me expliqué bien, me dices y edito el post xD hehe saludos!