It's a great idea and just what I need. Would be great to have synchronized the row sizing too. Anyway a good starting point for me. Thanks again.
lunes, 10 de octubre de 2011
Le blog de Thibaud :-): Footer on WPF DataGrid: by use several synchronized datagrid
Publicado por Nacho en 18:55 0 comentarios
miércoles, 13 de enero de 2010
Cuando y como implementar IDisposable
Cuando implementar la interfaz IDisposable:
- Cuando la clase contenga alguna variable de tipo "Unmanaged".
- Cuando la clase contenga alguna variable que implemente la interfaz IDisposable.
- Cuando la clase contenga manejadores (handlers) de eventos.
#Region "IDisposable" Private m_disposed As Boolean
Protected ReadOnly Property Disposed() as Boolean Get Return m_disposed End Get End Property
Protected Overridable Sub Dispose(ByVal disposing As Boolean) If Not m_disposed Then If disposing Then ' Free other state (managed objects). End If ' Free your own state (unmanaged objects). ' Set large fields to null. End If
m_disposed = True End Sub
Public Sub Dispose() Implements IDisposable.Dispose ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above. Dispose(True) GC.SuppressFinalize(Me) End Sub
Protected Overrides Sub Finalize() ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above. Dispose(False) MyBase.Finalize() End Sub#End Region
Publicado por Nacho en 8:00 0 comentarios
viernes, 8 de enero de 2010
Declaración de regiones en el código
Toda clase deberá estar incluir estas regiones para permitir ocultar las partes que no interesen en un momento dado del desarrollo.
- Attributes: dentro de esta región estarán todos los atributos (variables) de la clase, tanto estaticos como de instancia.
- [Constants]: se incluirán aquí tanto las Const como los atributos ReadOnly.
- Properties: contendrá las propiedades si existen.
- [Events]: contendrá las declaraciones de los eventos de la clase.
- Public Methods: contendrá todos los métodos excepto los declarados Private y los manejadores de eventos.
- [Event Handlers]: se incluirán aquí todos los métodos manejadores de eventos que defina la clase si los hay.
- Private Methods: incluirá todos los metodos privados de la clase.
- [Interface implementations]: opcionalmente se podrán crear regiones para las implementaciones de las interfaces (sobre todo cuando sean interfaces accesorias como IDisposable, ICloneable, etc).
Publicado por Nacho en 8:00 0 comentarios
Etiquetas: regiones norma
jueves, 7 de enero de 2010
Declaración de variables en métodos
Todas las variables locales de los métodos se declararán al inicio del método antes de cualquier código y no incluirán su inicialización. Inicializar se considera parte del código del método.
Excepciones permitidas:
- Constructores que deben llamar a otros constructores: como la primera instrucción debe ser la llamada al constructor anterior se permite romper la norma.
- Instrucciones ForEach xxx As xxx In xxx o For xxx As xxx To xxx: como la propia declaración de la instrucción incluye una sintaxis para la declaración de variables se admite su uso puesto que resulta simple observar en el código cual es la variable principal del bucle.
- Instrucción Using: como la propia instrucción obliga a que la declaración de la variable se haga dentro del bloque se permite romper la norma.
Con esta norma se propone separar la declaración de elementos y su uso, de manera que no sea necesario buscar en el código cuando una variable determinada fue declarada, puesto que todas están declaradas al inicio del método.
Publicado por Nacho en 8:00 0 comentarios
Etiquetas: declaracion variables norma
miércoles, 6 de enero de 2010
Truco: Como usar cualquier clase en un Setting
El problema viene cuando uno quiere guardar un objeto propio en los Settings. Después de todo es mucho mas sencillo guardar en un Setting un objeto de una clase nuestra que tener que descomponer dicha clase en sus atributos más relevantes y guardar estos en los Setting.
Inicialmente uno cree que pude salir adelante con la opción Browse:
- Crearemos una propiedad con el nombre que deseemos y le dejaremos el tipo que sale por defecto.
- Seleccionaremos la opción de ver todos los ficheros del proyecto en el Solution Explorer
- Abriremos el fichero Settings.Designer.vb que se encuentra dentro de My Project -> Settings.settings (si es un proyecto WPF no se puede abrir así y hay que abrir directamente el fichero Settings.Designer.vb almacenado en disco).
- Buscaremos la propiedad que creamos en el primer paso y le pondremos el tipo deseado.
- Por ultimo abriremos el fichero Settings.settings seleccionando Open With del menú contextual y escogiendo el editor XML y buscaremos la propiedad creada y le cambiaremos el Type por el nombre completo de nuestro tipo (Namespace.Class) también conocido como Full Qualified Name.
Publicado por Nacho en 8:00 0 comentarios
Etiquetas: settings truco
martes, 5 de enero de 2010
Utilización de sintaxis .
Publicado por Nacho en 8:00 0 comentarios
Etiquetas: Sintaxis codificacion norma
lunes, 4 de enero de 2010
Estructura de las funciones
Para estructurar correctamente el código las funciones tendrán únicamente un punto de retorno al final de la función. De esta manera es más fácil seguir la estructura del código puesto que no hay retornos funcionando como "goto" ocultos.
La variable devuelta en el retorno de la función se llamará siempre result (excepto en los casos en que el resultado se pueda calcular en una sola linea en cuyo caso no será necesario declarar dicha variable).
Por lo tanto la estructura de una función siempre quedará inicialmente así:
He creado un Snippet (con la herramienta SnippetEditor) para crear el esqueleto automáticamente con el siguiente código:
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Create Function</Title>
<Author>Ignacio Soler (Sipro Ingenieria)</Author>
<Description>Create Function</Description>
<HelpUrl></HelpUrl>
<SnippetTypes />
<Keywords />
<Shortcut>creaFunc</Shortcut>
</Header>
<Snippet>
<References />
<Imports />
<Declarations>
<Literal Editable="true" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<ID>FunctionName</ID>
<Type />
<ToolTip />
<Default>FunctionName</Default>
<Function />
</Literal>
<Literal Editable="true" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<ID>ReturnType</ID>
<Type />
<ToolTip />
<Default>ReturnType</Default>
<Function />
</Literal>
</Declarations>
<Code Language="VB" Kind="method decl" Delimiter="$"><![CDATA[ Public Function $FunctionName$() As $ReturnType$
Dim result As $ReturnType$
Return result
End Function]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
Publicado por Nacho en 8:00 0 comentarios
Etiquetas: Sintaxis codificacion norma