miércoles, 31 de octubre de 2012

Deshabilitar que la tecla ENTER dispare el evento Button.Click

 

Este caso aunque la solución llegue a ser sencilla en implementación, no me parece que este al alcance de quienes tenemos un conocimiento básico, intermedio de DotNet. En fin, cuando necesitemos que un botón dispare su evento click al pulsar la tecla ENTER cuando esté enfocado, deberemos forzosamente crear nuestro propio botón heredándolo de otro botón claro esta, en mi caso lo he hecho a partir de uno de DevExpress.

Una vez hecho esto, sobrescribir el método ProcessCmdKey tal como muestro más abajo.

Para mi  caso muy particular se requería que si se detectara a tecla y de ser ENTER se enviara el foco al siguiente control, lo cual realice mediante un PreviewKeyDown.

image

Public Class iBotonDx     Inherits DevExpress.XtraEditors.SimpleButton     Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean         Return keyData = Keys.Enter OrElse MyBase.ProcessCmdKey(msg, keyData)     End Function     Private Sub iBotonDx_PreviewKeyDown(sender As System.Object, e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles Me.PreviewKeyDown         If e.KeyCode = Keys.Enter Then             SendKeys.Send("{TAB}")         End If     End Sub

End Class

Bien es todo en este entrada. Como siempre espero sea de utilidad.


 


Happy Coding… KarlozArba

lunes, 15 de octubre de 2012

La propiedad EditValue de un TextEdit de DevExpress devuelve error en su método GET si no se tiene un valor inicial.

Bueno pues resulta que si no hemos asignado mediante código un valor inicial para la propiedad EditValue en un TextEdit de DevExpress este nos tira un error de referencia nula. Y este error se dispara aun cuando validemos el contenido de la propiedad con IsNothing o String.IsNullOrEmpty.

Bien la solución es bastante sencilla, lo único que debemos hacer es configurar en tiempo de diseño dicha propiedad, estableciendo el tipo de dato que contendrá y el valor que almacenara cuando nosotros no establezcamos nada de forma predeterminada.

image

 

Espero que les sea de utilidad.

 

Happy Coding…. KarlozArba

viernes, 5 de octubre de 2012

Binding de los valores de una ENUMERATION en el DataSource de un Control.

 

El día de hoy, muy brevemente comentare que cuando nos sea necesario cargar los valores de una enumeración en el DataSource de un control [ej. Combo, List, etc] quizá nuestra primera intensión sea recorrer la enumeración sin embargo la solución que les recomiendo es la siguiente:

cbEstatus.Properties.DataSource = System.Enum.GetValues(GetType(Dominio.Enumeraciones.EnEstatus))

Con lo cual cargaran inmediatamente los valores, ahorrándonos un poco de trabajo y alguno que otra contratiempo.

 

Bien como dije la entrada de hoy ha pecado de breve, pero como siempre espero que sea de utilidad para la comunidad.
Happy Coding... Karloz Arba

viernes, 14 de septiembre de 2012

Crear Custom Control Panel mediante un User Control.

Que tal, ya después de un largo tiempo sin agregar entradas a mi modesto blog, quiero dar una pequeña aportación, pero que espero este llena de posibilidades para todos.

Bien pues ¿que tal tener nuestro propio Control Panel? ¿Porqué? o ¿Para que?, las respuestas las hay de todas, en mi caso en la consultora para la que “laburro”, tenemos un conjunto de controles de usuario a los que se les han agregado algunas funciones de dibujo que permiten simular que cada control esta dentro de un panel con bordes redondeados [ese código esta pendiente para otra entrada], bueno pues hay casos en los que necesitamos tener varios controles agrupados en un solo Panelote, así que creamos un User Control que no tiene más que las funciones de dibujo, y así conseguimos nuestro Panel con bordes redondeados para agrupar otros controles, pero nada!! que es solo un farol pues en realidad no agrupa nada. ¿Porqué?, bueno pues porque si bien en cierto que los UC implementan IContainer tambien en cierto que solo funcionan de esta forma en modo de diseño. Pero bueno después de este largo preámbulo verán que la forma de crear su control contenedor es tan fácil que raya en lo ridículo.

1. Crear un proyecto de Librería de Controles
2. Por defecto nos agrega un control de usuario denominado UserControl1, renombrarlo como mejor nos parezca.
3. Agregamos los siguientes Namespace, pues necesitaremos un atributo para nuestra clase que se encuentra en ellos: 

System.ComponentModel 
System.ComponentModel.Design
4. Marcamos nuestra clase con el atributo:
<Designer ("System.Windows.Forms.Design.ParentControlDesigner, System.Design", GetType(IDesigner))>
Esto proveerá la magia para que nuestro UC pueda comportarse como un control del tipo ParentControl o contenedor.
Nuestra Clase debería quedarnos más o menos así:
image
Bien ha sido todo por hoy, como siempre espero que les sea de utilidad.
Happy Coding... Karloz Arba

jueves, 5 de julio de 2012

CREATE FILE encountered operating system error 5(Access is denied.)

Etiquetas de Technorati:

En el caso de que desinstales tu instancia de sql server express, y quieras realizar un Attach de las bd que tenias anteriormente, es posible que te encuentres con el siguiente mensaje, al momento de adjuntarlas:

CREATE FILE encountered operating system error 5(Access is denied.) while attempting to open or create the physical file 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MyDataBase.mdf'. (Microsoft SQL Server, Error: 5123)

Bueno pues la solución pasa simplemente por:

* En un explorador de windows abrir las propiedades de cada archivo .mdf y .ldf que necesites adjuntar, en la pestaña de seguridad agrega “Todos”, o “Everyone” según el idioma de tu SO, dale todos los permisos, y listo!! podras adjuntar sin problemas.

Happy Coding... Karloz Arba

lunes, 14 de mayo de 2012

Montículo, Pila, Tipos por Valor y por Referencia WTF??

En esta ocasión comentare algunos conceptos básicos sobre programación, ya se! ya se! aquí puro experto, pero seguro que abra muchos a quienes les sea de utilidad que es precisamente la intensión de estos aportes.


Cuando declaramos una variable, antes que nada debemos estar consientes de que esta formada por tres elementos: 
1. Nombre de la variable.
2. Tipo de Datos de la variable.
3. Valor de la variable,


Ahora bien, dependiendo del tipo de la variable que usemos, esta se guardara en uno u otro tipo de memoria, ya que para este fin existen dos tipos: la Pila [Stack] y el Montículo [Heap].


El compilador almacena las variables de tipos primitivos en la Pila, que es una estructura de tipo LIFO [Last InFirst Out], esta memoria es mucho mas ágil aunque Estática, que su contraparte, sin embargo tiene una limitante en cuanto al tamaño que es de 1024 kb. No obstante es posible modificarla mediante opciones de compilación, pero esa es otra historia.


Por otra parte cuando ocupamos tipos Referencia [Clases, Objetos, Interfaces, Delegados, etc.] estos son almacenados en el Heap, que es otro segmento o tipo de memoria, que se asigna de forma dinámica a través de un administrador de la misma, que en DotNet se denomina: Garbage Collector o Recolector de Basura, que hay que decir que es quien se encarga de liberar la memoria que ya no es ocupada. Es importante mencionar que aun cuando el objeto referencia se encuentra en el Heap, en el Stack se crea un Apuntador, que almacena precisamente la dirección donde puede localizar el contenido de esa variable referencia, por esa razón cuando asignamos un objeto a otro, en realidad lo que estamos haciendo es copiar a su apuntador la misma dirección de memoria donde se localiza el objeto.


Hemos dicho que los tipos primitivos se copian en el Stack, sin embargo como toda regla tiene su excepción y esta es que si estas variables son miembros o propiedades de objetos, estas se almacenan también en el Heap y solo cuando son variables locales dentro de sus métodos estas van al Stack, ¿por que? porque son variables temporales de las que el compilador solo deberá almacenar su valor de forma breve para realizar algunas operaciones, y esto ademas agilizara la ejecución de la aplicación.


Bueno de momento esto ha sido todo, espero no liarlos mucho con tantas letras, pero muchas ocaciones estos detalles que suelen ser teóricos y en apariencia muy basicos, pueden hacer la diferencia dentro de nuestros desarrollos.


Happy Coding... Karloz Arba 



Imprimir pantalla y pantalla actual en vb.net

Que tal. De manera breve mostraré como mandar al portapapeles la pantalla y la pantalla actual.

El como tratarla lo veremos después, aunque la solución es tan sencillo como mandarla a un Image.

' en un botón o donde queramos establecer la impresión colocamos los siguiente:

 SendKeys.Send("{PRTSC}") ' para la pantalla completa 


 SendKeys.Send("%{PRTSC }")  ' para la pantalla activa. 

 Espero que les sea de utilidad. karlozarba... Happy coding!

miércoles, 9 de mayo de 2012

Desde Windows phone

Que tal! Pues ya he dejado mi android de lado y ahora desde WP checando .si es posible bloggear decentemente. Saludos.

lunes, 26 de marzo de 2012

Activar los Comentarios XML de documentación en VB.Net cuando han dejado de trabajar.

Que, tal.

En esta ocasión quiero comentar una situación que me trajo un buen rato de cabeza, y es que mientras desarrollamos generalmente documentamos nuestros métodos haciendo uso de los comentarios en XML que nos proporciona VS, sin embargo llega el momento en que esta herramienta solo esta disponible en proyectos de C# y por alguna razón en VB.Net simplemente no aparecen, aun cuando pulsemos una y otra vez ''' que es la combinación que nos permite visualizarlas.

Pues bien la solución es bastante extraña pues en las propiedades del proyecto debemos dirigirnos al apartado de compilación y CHECKEAR la opción “Generar documentación XML”. Puede suceder, como a mi me paso, que la opción estaba checkeada, pero el control se encontraba en un estado similar a deshabilitado, bueno pues simplemente desmarcar y marcar y con eso bastara.

image

Bueno espero como siempre, que les sea de utilidad.

Que la Fuerza del código les acompañe.

Saludos

karloz arba

miércoles, 7 de marzo de 2012

Obtener el registro seleccionado en un GridLookupEdit de DevExpress

 

Bueno ya tiene un muy buen rato que no agregaba nada al blog, espero como siempre que a todos los que ocupan la Suite de Dx para Windows Forms les sea de utilidad.

// Asignamos el valor “Visible” del Contenedor en alguna  variable aunque esto claro esta es mejorable
string valor = lueVerBd.EditValue.ToString();                  //El control tiene un método que a partir de ese valor seleccionado nos devolverá el registro al que pertenece.
// Claro que este valor lo busca en el campo identificado como Campo Llave.
DataRowView dr;
dr = (DataRowView) lueVerBd.Properties.GetDataSourceRowByKeyValue(valor);

 


Bien pues por el momento es todo….


Happy Coding!!


karlozarba