viernes, 5 de octubre de 2012

[003] Inicio, La clase Prg




Vamos a ver como podemos empezar nuestros proyectos de C Sharp si perder de vista la forma de programar que utilizábamos en VisualFoxpro. 

En este artículo vamos a tratar sobre el .NET FRAMEWORK con el que tenemos que trabajar ( Sí un determinado proyecto no nos lo impide) y sobre el Prg de inicio, en este caso el fichero que contiene el método Main en Visual Studio, llamado  [ program.cs ].


Actualmente deberíamos programa con el .NET FRAMEWORK 2.0, y a continuación os argumentaré el porqué de esta decisión. Las razones podrían ser la siguientes, aunque puedes decidir trabajar con otros .NET FRAMEWORK, ya que en el código del fichero principal  [ program.cs ] no hay nada que impida esta decisión:

  • Si excluimos XP, Windows 7 (32 y 64) y posteriores incorporan por defecto como mínimo el .NET FRAMEWORK 2.0.
  • Su peso para XP no supera los 40 Megas, en el momento de la instalación.
  • Esta muy documentado en internet y depurado por Microsoft.
Para mi son suficientes, no se para vosotros. Veamos ahora el código a incorporar en el fichero [ program.cs ]:

01. using System;
02. using System.Collections.Generic;
03. using System.Windows.Forms;
04. using System . IO;
06. 
07. namespace NuestrpPrograma
08.{
09.  static class Prg
10.  { 
11.       public static bool TestMode = false;
12.       public static string LastText = "";
13.       public static string CurDir = "";
14. 
15.       [STAThread]
16.       static void Main()
17.       {
18.          CurDir = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\\"));
19. 
20.          ifFile.Exists( CurDir + "\\Logger.Txt" ))  File.Delete( CurDir + "\\Logger.Txt" );
21.          TestMode = ( File . Exists ( CurDir + "\\Test.ON" )  ); 
22.     
23.         Application.EnableVisualStyles();
24.         Application.SetCompatibleTextRenderingDefault(false);
25.         Application.Run(new _screen());
26.       
27.       }
28. 
29.       public static bool Log( string cIn, string cTx )
30.      {
31.         if!TestMode )                          { return false; }
32.         if ( cIn + cTx == Prg.LastText )  { return true; }
33.  
34.         try
35.        {
36.
37.        StreamWriter oWriter = File.AppendText(ExecPath + "\\Logger.Txt");
38.        oWriter.WriteLine( "[" + DateTime.Now.Millisecond.ToString("0000") + "] " + cIn + " [ " + cTx + " ]" 39.);
40.        oWriter.Close();
41.
42.        }
43.        catch { return false; }
44.     
45.        Prg.LastText = cIn + cTx;
46.       return true;
47.
48.      }
49.
50.      public static bool Log( string cIn, string cTx, string cFile )
51.     {
52.         if!TestMode )                         { return false; }
53.         if ( cIn + cTx == Prg.LastText ) { return true; }
54.  
55.        try
56.       {
57.
58.       StreamWriter oWriter = File.AppendText(ExecPath + "\\" + cFile.Trim() + ".txt");
59.       oWriter.WriteLine( "[" + DateTime.Now.Millisecond.ToString("0000") + "] <" + cIn + " [ " + cTx + " ]" 60.);
61.       oWriter.Close();
62.
63.       }
64.       catch { return false; }
65.  
66.      Prg.LastText = cIn + cTx;
67.      return true;
68.
69.     }
70.  }
71.}

Ok, vamos a desgranar el código expuesto anteriormente...

Lo primero es declarar 3 variables públicas (a parte de todas las que interesen en nuestra aplicación). 
  • [Línea 11] La primera es la que yo llamo TestMode, y como el nombre dice nos indicará si estamos en Modo Test. La variable se pondrá a true si existe un fichero al al lado del ejecutable llamado [ Test.ON ], vacío o con contenido, es irrelevante.
  • [Línea 12] La segunda LastText contendrá el último texto enviado al fichero [ Logger.Txt ], para evitar que se repitan las entradas en este fichero y facilitar así la lectura del mismo.
  • [Línea 13] La tercera es CurDir y contendrá la ruta de nuestro ejecutable la cual nos servirá, de seguro, en múltiples ocasiones.
Ahora vamos a ver lo mínimo y necesario para el contenido del método Main, a la búsqueda de nuestra filosofía Foxpro.

  • [Línea 18] Lo primero es cargar la variable CurDir con su correspondiente ruta, la del ejecutable una vez compilado.
  • [Línea 20] En esta línea comprobamos si ya existe el fichero [ Logger.Txt ], si es así lo eliminamos para empezar siempre a cargarlo con datos de nuevo.
  • [Línea 21] Aquí ponemos la variable TestMode a true si comprobamos que existe, al lado del ejecutable, el fichero [ Test.ON ].
  • [Línea 23] y [Línea 24] y [Línea 25] Ejecutamos el formulario _screen, para los programadores de Foxpro esta será la ventana principal de Foxpro y de nuestras Aplicaciones.
Después del método Main tenemos dos métodos más, en realidad uno sobrecargado ( Esto en Fox no se podía realizar ) el método se llama Log, y cuando lo utilicemos en la aplicación lo podemos hacer de dos maneras diferentes.

En la primera cargaremos datos en el fichero [ Logger.Txt ] y en la segunda cargaremos datos en el fichero que queramos. Vamos a ver varios ejemplos:

namespace Application
{
  static class Prg
  {
  public static string CurDir = "";
  public static string LastText = "";
  public static string CurDir = "";

  [STAThread]
  static void Main()
  {
  
  CurDir = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\\"));
  Log( "Prg.Main()", + "Path: " CurDir  );

  if ( File.Exists( CurDir + "\\Logger.Txt" ))  File.Delete( CurDir + "\\Logger.Txt" );
  TestMode = ( File . Exists ( CurDir + "\\Test.ON" )  ); 

 Log( "Prg.Main()", + "Run :screen" );
     
  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  Application.Run(new _screen());

  }
 }
}

En este caso utilizamos el Log para documentar puntos del arranque de la aplicación. Ten en cuenta que si utilizas el método Log fuera de la clase Prg deberás hacerlo de esta manera:

Prg.Log( "Clase.Metodo()", + "Parametros..." );

La otra forma de utilizar el método Log es indicarle en un parámetro más el nombre del fichero particular donde queremos separar parte de los datos, por ejemplo todo el código relacionado con un determinado formulario (Lo veremos más adelante).



NOTA: No aconsejo, para nada, cargar la clase Prg con más métodos que los que he definido en la misma. 

No hay comentarios:

Publicar un comentario