jueves, 18 de diciembre de 2014

Combobox Read Only

Combobox Read Only


 private void cbxTipo_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

** Claro esto no permite escribir por las iniciales de los puertos e ir completando

jueves, 16 de octubre de 2014

Datagridview Excepcion al Intentar Ordenar elementos

Datagridview Excepcion al Intentar Ordenar elementos
Editar en Columns, Collection, SortMode = NotSortable

miércoles, 15 de octubre de 2014

Validaciones usando Regex

Entrada alphanumérica (sin caracteres especiales): Aceptando letras de A-Z (mayúsculas y minúsculas), números 0-9, y la tecla backspace.
        private void alphaNumericTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var regex = new Regex(@"[^a-zA-Z0-9\b]");
            if (regex.IsMatch(e.KeyChar.ToString()))
            {
                e.Handled = true;
            }
        }


Entrada alphanumérica (separada por espacios, sin caracteres especiales): Aceptando letras de A-Z (mayúsculas y minúsculas), números 0-9, espacio y la tecla backspace.
        private void alphaNumericPlusSpaceTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var regex = new Regex(@"[^a-zA-Z0-9\x20\b]");
            if (regex.IsMatch(e.KeyChar.ToString()))
            {
                e.Handled = true;
            }
        }

 
Dirección Ip:
if (!(string.IsNullOrEmpty(txbIpAddress.Text)) && (Regex.IsMatch(txbIpAddress.Text, @"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b")))
{
          RegECRUdp(1, txbIpAddress.Text, "", 5002, false);
          testResult = TransTestComm(1, 0);

}
else
{
          MessageBox.Show("Dirección Ip inválida.");
          return;

}


Email:
private void txbEmail_Validating(object sender, CancelEventArgs e)
{
     string email = txbEmail.Text;
    Regex regex1 = new Regex(@"\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,4}\z");
    Regex regex2 = new Regex(@"^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*");
           
    Match match1 = regex1.Match(email);
    Match match2 = regex2.Match(email);
    if (match1.Success && match2.Success)
    {
        lblEmail.ForeColor = Color.Black;
        lblRequiredFieldForInfoStore3.ForeColor = Color.Goldenrod;
    }
    else
    {
        lblEmail.ForeColor = Color.Red;
        lblRequiredFieldForInfoStore3.ForeColor = Color.Red;
        return;
        }


Regular Expression Library: Buscador de expresiones regulares
http://regexlib.com/

martes, 30 de septiembre de 2014

viernes, 5 de septiembre de 2014

Globalización y Localización


Qué es Globalización?

Qué es Localización?

Diferencias entre Globalización y Localización


  • Cuando se está utilizando la localizaion y Windows Forms, al modificar el formulario (Default) se afectan a todos los demás recursos de dicho formulario localizado.



Lista de Culture Info soportados por Windows
National Language Support (NLS) API Reference

Lista de Códigos de Países  según ISO
http://es.wikipedia.org/wiki/ISO_3166-1


Cuando se necesita crear CultureInfo, pues no están en la lista de Localización se basa en esta clase de .NET
CultureAndRegionInfoBuilder Class, ver CultureInfo, palabras claves Custom Culture

Leer para agregar los resources

http://books.google.co.ve/books?id=VL3pIDstrQsC&pg=PA181&lpg=PA181&dq=c%23+register+custom+culture&source=bl&ots=7V0SQnvBok&sig=ArDoXJO5bvh_m1tEmFDcqKzGByc&hl=es-419&sa=X&ei=pfdqU_WYDtStyATvwoCwDw&ved=0CG4Q6AEwBg#v=onepage&q=c%23%20register%20custom%20culture&f=false

http://tutorials.csharp-online.net/Using_Custom_Cultures%E2%80%94Installing_and_Registering_Custom_Cultures

http://www.codeproject.com/Articles/66277/Creating-Extending-a-Culture

http://msdn.microsoft.com/en-us/library/ms172469%28v=vs.90%29.aspx

http://msdn.microsoft.com/en-us/library/vstudio/ms404375%28v=vs.100%29.aspx

http://blogs.msdn.com/b/shawnste/archive/2005/11/23/496440.aspx

http://www.codeproject.com/Articles/15175/NET-Internationalization-The-Developer-s-Guide-to

http://msdn.microsoft.com/es-es/library/ms404375(v=vs.90).aspx

http://www.countrycodesfinder.com/country-ISO-codes.html (Codigos ISO por Regiones)

martes, 2 de septiembre de 2014

miércoles, 25 de junio de 2014

Para la elaboracion de aplicaciones

System.Environment.CurrentDirectory (Obtener la ruta de la Aplicacion)

lunes, 9 de junio de 2014

logo de la impresora fiscal

 public frmMainForm()
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(_myMainFormCtrl.MyUtil.CultureInfo);

           
            InitializeComponent();
           
            this._myServiDataProduct = new ServiceDataPlu();
            this._myServiDataFooter = new ServiceDataFoot();
            this._myServiDataHeader = new ServiceDataHead();
            this._myServiDataCountry = new ServiceDataCountry();
            this.QuantityLine = 1.00;
            this.AmountPayment = 0.00;
            this.TotalAmount = 0.00;
            this.TypeDocFiscal = 0;

            ///Nuevo
            //_myMainFormCtrl._myLogoInfo.MytbrBrightness = this.tbrBrightness;
            //_myMainFormCtrl._myLogoInfo.MytbrZoom = this.tbrZoom;
            _myMainFormCtrl._myLogo.tbrBrilloLogo = this.tbrBrightness;
            _myMainFormCtrl._myLogo.tbrZoomLogo = this.tbrZoom;
        }

sábado, 7 de junio de 2014

Operaciones con Combobox

String commandString = "SELECT descripcion from departamentos";
MySqlCommand command = new MySqlCommand(commandString, conexionBD.getConexion());
MySqlDataAdapter myAdapter = new MySqlDataAdapter(command);
DataSet myds = new DataSet();
myAdapter.Fill(myds, "plu");
dataGridView1.DataSource = myds.Tables["plu"].DefaultView;

//int tablas = myds.Tables[0].Rows.Count;
//comboBox1.DataSource = myds.Tables[0].Columns;


comboBox1.DataSource = myds.Tables["plu"].DefaultView;
comboBox1.DisplayMember = myds.Tables["plu"].Columns[0].ToString();


Investigar value commited combobox!! http://msdn.microsoft.com/en-us/library/ms753382(v=vs.85).aspx#combobox_styling

Cuando se intenta leer el valor de un combobox y no importa si el valor que este contiene se haya hecho commit, se puede utilizar el EditedFormattedValue para obtener dicho valor

jueves, 5 de junio de 2014

REviSAR EMULADOR VFP

Revisar PC
 C:\PrgramFile\Java\jre7\bin
si estan: rxtxSerial.dll y rxtxParaller.dll de la Java/jre7/bin/

Si estan esas dlls, consola
C:\VFPHKA2.0\dist>  java -jar VFPHKA.jar
Ver que se imprime por consola

Chequear tambien
C:\com0com



martes, 3 de junio de 2014

NOTAS

datagridviewcomboboxcolumn si se le carga una lista de valores y luego se le pasa un valor ?contenido? en formato string, este se elige en la lista del combobox existente.

un componente como un datagridview tiene por defecto o porque esta contenido dentro de otro componente, ciertas caracteristicas como Font Bold, pero si en un columna que esta heredando esta caracteristica por defecto, se le configura alguna caracteristica como Font Bold en false, este aceptara esta propiedad y valdra en su campo.

jueves, 29 de mayo de 2014

Herramientas

(Herramienta para el analisis de proyectos .NET)
http://en.wikipedia.org/wiki/FxCop

miércoles, 7 de mayo de 2014

Codigo por analizar

Crear dinamicamente controles por codigo
  

//for (int i = 1; i < 9; i++) {
                //TextBox textbox = (TextBox)Controls["textbox" + i];

Añadir los controles a una lista
                //txtList.AddRange(Controls.OfType());
            //}

miércoles, 23 de abril de 2014

GUIA DE CONSEJOS DE ELABORACION DE APLICACIONES

* Si en una aplicación se repite una sección que además es susceptible a cambios, para trabajar de la manera más óptima es recomendable utilizar un User Control para esta sección.

martes, 22 de abril de 2014

Resources

Zeta Resource Editor
Con esta herramienta se puede editar los resources de un proyecto de winform en sus cadenas de texto
http://www.zeta-resource-editor.com/index.html


Windows Form Resource Editor
http://msdn.microsoft.com/en-us/library/8bxdx003(v=vs.110).aspx


SDK para editar Resources de Windows(alrededor de 2,5 GB)
http://www.microsoft.com/en-us/download/confirmation.aspx?id=3138

miércoles, 26 de marzo de 2014

WPF Resources



recursos localizados (por pais) para imagenes, etc?
recursos generales?
resource dictionary?
--->>
que es baml? .....

WPF Globalization and Localization Overview

How to: Localize an Application



WPF Localization

WPF Localization for Dummies

Using Locbaml

no funciona, no lo entiendo

Using RESX Files

no puedo agregar el recurso

Another Way : Use Dynamically Loaded Assemblies With ResourceDictionaries



static resource
dinamic resource



Aspectos a favor WPF Localizacion


Aspectos en contra
El intelisense no ayuda en todos lo casos mostrando los miembros validos
Hay que agregar linea a linea cada recurso en cada archivo de recursos
Todos los recursos estan en un mismo archivo de manejo manual y si la aplicacion crece significativamente, dicha lista se incrementará y será tediosa y propensa a errores. Además de que si se modifica un archivo, se deben modificar todos de manera manual
No tiene para guardar el ajuste de tamaño por recurso de manera sencilla



domingo, 9 de marzo de 2014

Open File Dialog

OpenFileDialog

OpenFileDialog openFileDialog1 = new OpenFileDialog();
 openFileDialog1.Filter = "Text Files (.txt)|*.txt|All Files (*.*)|*.*";
 openFileDialog1.ShowDialog()==DialogResult.OK




Clase String

String.Empty
Es un campo estático de sólo lectura su valor es ""


String.NullOrEmpty
Es un método para determinar si el valor del campo suministrado es nulo o vacío
retorno:
true, si es nulo (null) o vacío el valor del campo
false, si posee algún valor distinto de lo anterior

Ejemplo 5: formato Cultura-sensible (Revisar)

http://msdn.microsoft.com/es-es/library/system.string.format(v=vs.110).aspx





jueves, 6 de marzo de 2014

IFormatProvider
Según MSDN IFormatProvider:

"Proporciona un mecanismo para recuperar un objeto con el fin de controlar el formato.

La interfaz IFormatProvider proporciona un objeto que proporciona información del formato las operaciones de formato y análisis. Las operaciones de formato convierten el valor de un tipo en la representación de cadena de ese valor. Los métodos de formato típicos son los métodos ToString de un tipo, así como Format. Las operaciones de análisis convierten la representación de cadena de un valor en un tipo con ese valor. Los métodos de análisis típicos son Parse y TryParse."

Entonces:

objeto ----Format(), ToString()----> Representación de cadena de valores

objeto <----tryparse cadena="" de="" n="" p="" parse="" representaci="" valores="">

Practicas para aplicaciones
http://msdn.microsoft.com/en-us/library/w7x1y988(v=vs.100).aspx

miércoles, 5 de marzo de 2014

Validaciones (Regex)


Regex (Clase)
http://msdn.microsoft.com/es-es/library/system.text.regularexpressions.regex%28v=vs.110%29.aspx

Best Practices for Regular Expressions in the .NET Framework

Obtener todos los puertos COM automáticamente del PC


Si es necesario que los puertos COM estén ordenados, puede ser así:

            string [] ports = System.IO.Ports.SerialPort.GetPortNames();
            Array.Sort(ports);
            cbxCOM.DataSource = ports;
         
         
Si no es necesario un ordenamiento, pudiera ser así para añadirlos a un combo box, por ejemplo:

           cbxCOM.DataSource = System.IO.Ports.SerialPort.GetPortNames();

sábado, 1 de marzo de 2014

Clases y Objetos

Que es una clase

Una clase es una estructura de datos que utilizaremos para definir nuestros propios tipos que extenderán los primitivos que posee el lenguaje.

La mayoría de las veces, las clases se utilizan por medio de sus instancias, las cuales se denominan objetos. Los objetos del mismo tipo (diferentes instancias de la misma clase) compartirán una estructura común, pero podrán poseer valores distintos en sus variables miembro.

Podríamos trazar una analogía entre una clase y sus objetos con lo que es un molde y los elementos creados a partir de él. Una clase define una serie de variables y comportamientos por medio de los cuales podremos crear objetos que poseerán dichas variables y comportamientos.

La cantidad de objetos que podremos crear a partir de una clase sólo estará limitada por la cantidad de memoria que posea el sistema.


Cómo declarar una clase

En C# las clases se declaran dentro de archivos de código fuente con extensión CS. Se utiliza esta teminación por convención, y se trata de archivos que contienen texto y que pueden ser abiertos por cualquier editor de textos, como por ejemplo, Bloc de Notas.

class
{
//cuerpo de la clase
}

En primer término, debemos escribir la palabra reservada class, y luego, un identificador, un identificador válido que cumpla con las reglas que habíamos mencionado previamente. Algunos identificadores válidos podrían ser:

Clase1
Esta_es_una_clase
_mi_clase

Vale recordar que el hecho de que el nombre sea aceptado por el compilador no significa que éste sea un "buen nombre". Mejor sería que el identificador de la clase fuera seleccionado en función de un nombre que describiera mejor lo qie representa dentro del programa (por ejemplo, Cliente, Producto, Cuadrado, etc.).



Modificadores de acceso

Dentro de lo que llamamos "cuerpo" de la clase se colocarán la declaración y la definición de todos sus todos sus miembros, que serán datos y métodos.

Las variables miembro de una clase se declaran como variables convencionales (como vimos en el capítulo anterior), pero pueden poseer algunos modificadores especiales. Un modificador muy utilizado es el de acceso, que regula la visibilidad que posee la variable o el método desde otros objetos.

Siempre es posible acceder a las variables de una clase desde los métodos declarados en ella, más allá de su modificador de acceso. Para otros métodos de otras clases, éstos impondrán limitaciones, que son:

* public: si la variable es declarada como pública, entonces es posible acceder a su contenido desde cualquier objeto de cualquier tipo.
* protected: si la variable es declarada como protegida, entonces no es posible acceder a su contenido desde objetos externos, pero sí es posible hacerlo desde métodos de la clase y las clases derivadas.
* private: si la variable es declarada como privada, entonces sólo es posible acceder a su contenido desde métodos de la clase, pero no desde métodos de clases derivadas. Por default, si no se especifica otra cosa, una variable es privada.
* internal: si la variable es declarada como interna, entonces sólo es posible acceder a su contenido desde métodos de clases que se encuentren dentro del mismo assembly.
* protected internal: si la variable es declarada como protegida interna, entonces es posible acceder a su contenido desde métodos de clases que se encuentren ubicadas dentro del mismo assembly, métodos que se encuentren situados en la misma clase y en clases derivadas.

Veamos cómo declarar algunas variables:

class Foo
{
int a; //Variable del tipo entero llamada "a"
}

Ahora la clase Foo posee como uno de sus miembros a una variable del tipo número entero. Esta variable será privada, pues no se ha especificado otra cosa. Por defecto, la visibilidad es privada.

Veamos cómo incluir los modificadores de acceso:

class Foo
{
public int a;
protected int b;
private int c;
}

Veamos: ahora nuestra variable a fue declarada del tipo pública, la variable b como protegida, y la c como privada (aunque especificar private no es necesario, en ocasiones se realiza para remarcar su condición).


Instanciación

Una vez que hemos definido nuestra clase, para poder utilizarla debemos crear una instancia debemos crear una instancia de ella (aunque es posible acceder a variables y métodos estáticos sin la necesidad de crear objetos de la clase). La declaración de un objeto es muy similar a la de cualquier otra variable. Recordemos que una clase es, al fin y al cabo, la definición de un nuevo tipo. Pues bien, un objeto es una variable que lleva por tipo una clase.

Suponiendo que ya hemos definido la Foo, ahora podríamos crear un objeto de ella del siguiente modo:

Foo miObjeto; //Declaración del objeto

¡Pero esto no es suficiente! Si bien ya declaramos que miObjeto será una variable de tipo Foo, los objetos requieren ser definidos de manera explícita por medio del operador new.

miObjeto = new Foo(); //Definición del objeto

Ahora sí, podremos acceder a todos los elementos del objeto. También podríamos haber declarado y definido el objeto en la misma línea:

Foo miObjeto = new Foo();

Pero ¿qué sucedería si declaramos el objeto miObjeto pero no hiciéramos uso del operador new? El objeto poseería el valor no definido asociado a él y cualquier intento de acceso a sus elementos provocaría un error de compilación, ya que el compilador advertiría esta situación.

Veamos, ahora, cómo instanciar un par de objetos y acceder a variables de éstos. Supongamos que nuestra clase Foo posee una variable a y otra b, ambas enteras.

Foo obj1 = new Foo();
Foo obj2 = new Foo();
obj1.a = 10;
obj2.a = 20;
Console.WriteLine("Valor de la variable a del objeto obj1: {0}", obj1.a);
Console.WriteLine("Valor de la variable a del objeto obj2: {0}", obj2.a);

Tanto obj1 como obj2 son instancias de la clase Foo; sin embargo, ambos objetos son independientes entre sí. Poseen la misma estructura, pero el valor dentro de sus variables puede ser totalmente diferente.

A continuación, analicemos de qué manera hemos realizado la asignación de valores a las variables de los objetos.

No podríamos haber colocado sólo el nombre de la variable, pues el compilador no podría haber determinado a qué objeto nos estabamos refiriendo. Entonces, la sintaxis correcta es colocar el nombre del objeto, el operador de selección (el punto), la variable, el operador de asignación y, finalmente, la expresión.


Constantes de una clase

Así como hablamos de constantes locales que se pueden declarar en un trozo de código, también es posible declarar constantes en el cuerpo de una clase. Las constantes pueden poseer los mismos modificadores de acceso que las variables.

class Foo
{
public const int a = 0;
}

Ahora a ya no es variable, sino constante, para todos los objetos del tipo Foo.

Nótese que hemos inicializado la constante en la misma línea en que la declaramos. Esto es algo obligatorio en este tipo de dato.

Pero además tiene una característica adicional: puede ser accedida o consultada sin requerir instanciación alguna, es decir, sin la necesidad de crear un objeto de Foo. ¿Por qué? porque no tiene sentido almacenar en objetos valores que serán iguales para todos ellos sin excepción.

Veamos, entonces, cómo acceder a una constante:
int b = Foo.a;

Como podemos apreciar en la línea de código anterior, creamos una variable temporal b y le asignamos el valor de la constante de la clase Foo. Nótese que no creamos un objeto de Foo, sino que utilizamos directamente el identificador de la clase seguido del operador selección y la constante.


Variables estáticas

Las variables estáticas, al igual que las constantes, pueden ser accedidas sin la necesidad de instanciar un objeto. Sin embargo, su valor puede ser modificado como cualquier otra variable. Podríamos pensar en ellas como variables de clase, siendo las variable tradicionales variables de objeto.

Este tipo de variables, al igual que las constantes o las variables convencionales, pueden poseer los mismos modificadores de acceso (public, private, protected, etc.).

Para declarar una variable como estática, bastará con agregarle el modificador static como prefijo al tipo de dato.

class Foo
{
int a = 1;
const int b = 1;
static int c = 1;
}

En el listado de código anterior, hemos declarado:

* La variable a como un número entero. Nótese que hemos inicializado dicha variable en 1 en la misma línea que su declaración.
* La variable b como una constante entera.
* Y, finalmente, a c como una variable estática entera. También la hemos inicializamos a un valor conocido, aunque esto no es obligatorio.

Veamos cómo hacer uso de este nuevo tipo de variables:

Foo.c = 30; //Accedo a la variable estático
Foo obj1 = new Foo(); //Creo un objeto
obj1.a = 10; //Accedo a su variable a
//Muestro el valor de c
Console.WiteLine("El valor de c es: {0}", Foo.c);
//Muestro el valor de a
Console.WriteLine("El valor de obj1.a es: {0}", obj1.a);


/////Inicializadores////
Cuando una variable se inicializa en la misma línea que su declaración dentro del cuerpo de la clase, se dice que posee un inicializador. Como vimos anteriormente, las constantes de una clase se deben poseer un inicializador.
///////////////////////////////////////////////////////////////////////////////



Los métodos

Las clases sólo con variables y constantes no resultan demasiado interesantes. También es posible declarar funciones dentro de una clase. Estas funciones (más conocidos como métodos) contienen el código que será ejecutado por nuestro programa cuando éstas sean invocadas.
Una función miembro o método posee:
* Un tipo de dato: es el devuelto por la función cuando ésta finaliza.
* Un identificador: es el nombre por medio del cual referenciarnos al método dentro de nuestro programa; lo utilizaremos para invocarlo.
* Parámetros: es una lista de variables que recibe el método. Esta lista puede estar vacía o poseer tantos elementos como queramos.

Para invocar un método en un programa, siendo éste un método convencional de un objeto, deberemos anteponer su nombre y operador de selección de miembros (el punto); luego se deberá colocar entre paréntesis todos los parámetros que requiera la función (si la función no recibe parámetros, simplemente se abren y se cierran los paréntesis). Tal y como hicimos en el ejemplo anterior de la función Main.



Métodos estáticos

Así como las variables estáticas pueden ser consideradas como variables de clase, existen métodos estáticos que pueden ser considerados como métodos de clase. Estos métodos deben poseer como prefijo al tipo de dato de retorno la palabra reservada static. Claro éstos tendrán algunas limitaciones: no podrán acceder a variables de objeto (es decir, no estáticas) o métodos de objetos (métodos convencionales no estáticos).

El modo de invocar un método estático es por medio del identificador de la clase en lugar del identificador del objeto (así como sucede con las variables estáticas).

Muchas clases de la librería BCL definen métodos estáticos. Ejemplo de esto es el método estático WriteLine de la clase Console.

Como se pasa un objeto a otro objeto:

http://stackoverflow.com/questions/12997635/object-passed-as-parameter-to-another-class-by-value-or-reference


Retornar valores

Hemos mencionado que los métodos pueden retornar valores o no. Si no devuelven ningún valor, simplemente se especifica que el tipo de dato de retorno sea void.