.NET, CSharp, SQL Server y sus parientes cercanos.NET, CSharp, SQL Server y sus parientes cercanosArticulos, novedades, ejemplos de codigo y otros valiosos recursos para desarrolladores
Articles:
1, 2
Articles
Ejecutar un instalador .msi que requiere .Net Framework 1.1 bajo .Net Frame
2007-07-17 14:27:00 Si tenemos un archivo de Windows Installer (archivo .msi) que requiere el .Net Frame work 1.1 pero en nuestro equipo solo tenemos instalado el .Net Framework 2.0, la aplicación se rehúsa a instalarse y simplemente obtenemos un mensaje como este: “This setup requires the .NET Framework versión 1.1.4322. Please install the .NET Framework and blah blah blah…” Una solución sería descargar e instalar el .Net Framework 1.1 como lo exige nuestra aplicación, con la consiguiente pérdida de tiempo y espacio en nuestro disco. Afortunadamente existe otra solución más directa: Modificar el archivo .msi Ocurre que los archivos de instalación tienen instrucciones para verificar que se cumplan ciertas condiciones antes de ejecutarse, entonces la solución es quitar esas instrucciones con un editor. Existe una herramienta de Microsoft llamada Orca que sirve para editar los archivos de instalación (.msi, .msm, .psp, y .msp). Esta herramienta está incluida en el Windows SDK, qu... More About: Bajo
Un ComboBox que muestra los Fonts instalados en el equipo
2007-07-16 14:33:00 En este post compartiré con ustedes una sencilla forma de implementar un Comb oBox (o un ListBox) que muestra los tipos de letra que tenemos instalados en el equipo, asi:Vamos directo al código. Primero necesitamos crear en nuestro Form un campo privado que almacenará los tipos de letra instalados en el equipo y servirá como DataSource de nuestro ComboBox. private InstalledFontCollection installedFonts = new InstalledFontCollection(); A continuación debemos configurar las Propiedades DataSource y DisplayMember del ComboBox, haremos esto en el constructor del Form, asi: private void Form1_Load(object sender, EventArgs e){ comboBox1.DataSource = installedFonts.Families; comboBox1.DisplayMember = "Name"; comboBox1.DrawMode = DrawMode.OwnerDrawFixed;} También hemos fijado la Propiedad DrawMode a OwnerDrawFixed, algo que también podríamos haber hecho usando el diseñador gráfico. Finalmente la verdadera acción tiene lugar en el evento DrawItem del Combo, ...
Arrastrar y mover un Control
2007-07-03 14:47:00 En este post expondré una sencilla forma de mover un control dentro su contenedor; algo que no es muy complicado en realidad, pero que tampoco es lo más intuitivo del mundo. Para lograrlo haremos uso de los eventos MouseDown, MouseUp y MouseDown, implementados en la clase Control , por lo que el código aquí expuesto nos servirá para mover cualquier objeto derivado de dicha clase. Para empezar creamos un formulario y añadimos un control cualquiera. Para este ejemplo utilizaré un simple Label. Ahora necesitamos declarar un campo privado del tipo booleano que nos indique si actualmente estamos arrastrando el control. private bool isDragging = false; Entonces nos valemos de los eventos MouseDown y MouseUp de nuestro Label para fijar el valor del campo isDragging, asi: private void label1_MouseDown(object sender, MouseEventArgs e){ isDragging = true;} private void label1_MouseUp(object sender, MouseEventArgs e){ isDragging = false; } Ahora si, la verdadera acci... More About: Arrast , Astra
La Clase OperatingSystem
2007-06-20 19:30:00 En uno de los foros en que participo, un colega preguntaba cómo se puede obtener la versión del Sistema Operativo que estamos ejecutando.Se puede obtener una referencia a la versión del SO que estamos ejecutando con el siguiente código:OperatingSystem os = Environment.OSVersion;Entonces, a través de las propiedades de la clase OperatingSystem podemos acceder a la siguiente información:os.Platform: La plataforma. Ej. Win32, Win32NT,....os.VersionString: Una cadena con la información completa de nuestro SOEj: "Microsoft Windows NT 5.2.3790 Service Pack 2"os.Version: La versión del SO. Las propiedades que tiene son:Major, MajorRevision, Minor, MinorRevision y Revisionos.Version.ToString() nos devuelve una cadena de tipo "5.2.3790"os.ServicePack: Una cadena que muestra la versión del Service Pack instalado.Ej: "Service Pack 2"Seguramente esta información le será útil a más de uno, saludos More About: Stem
Averiguar la ruta en que se ejecuta el programa
2007-06-19 19:40:00 Hola a todos. Aun sigo sin poder conseguir mucho tiempo libre, pero aprovecho ahora para iniciar una serie de posts en que compartiré con ustedes varios snippets muy útiles.Empiezo la serie con un snippet que permite obtener la ruta (path) desde la que se ejecuta el ejecutable de nuestra aplicación.string appPath = Application.ExecutablePath;o tambiénstring appPath = System.Reflection.Assembly.GetExecutingAs sembly().LocationSaludos More About: Ruta
El retorno...
2007-06-06 18:11:00 Aqui estoy otra vez.. con una explicación al prolongado silencio.Abril y Mayo fueron meses muy ajetreados para mí.Abril por todas las actividades asociadas con la Semana Santa y mayo por todos los preparativos de mi matrimonio. Asi es... finalmente me casé, y ahora estoy muy feliz, adaptándome al nuevo estilo de vida :)Como ya pasaron todos los ajetreos, a partir de ahora escribiré de forma más frecuente, asi que no olviden visitarme.Saludos.
Una pausa obligada...
2007-04-05 21:58:00 Estoy cooperando en las actividades de mi iglesia con motivos de la Semana Santa, asi que entre esa actividad y el trabajo de tiempo completo no he podido encontrar un tiempito para postear en este blog. Con toda seguridad volveré a publicar cosas interesantes a partir de la subsiguiente semana.. asi que.. un poco de paciencia. Saludos y que pasen una buena Semana Santa More About: Ausa
Un ComboBox con imágenes
2007-03-26 14:40:00 En este post les mostraré una forma de incluir imágenes al lado de cada elemento de un Comb oBox , asi:Para ello necesitaremos un Windows Form en el que incluiremos un control ComboBox y un Componente ImageList.En el ImageList cargamos las imágenes que queremos mostrar. En lo posible, el tamaño de estas imágenes debe ser de 16x16.Ahora necesitamos crear una clase muy simple que nos permita almacenar la etiqueta de los elementos del Combo y el índice de la imagen en el ImageList. class ComboItem{ private int _imageIndex; private string _etiqueta; public string Etiqueta { get { return _etiqueta; } set { _etiqueta = value; } } public int ImageIndex { get { return _imageIndex; } set { _imageIndex = value; } } public ComboItem(string etiqueta, int imageIndex) { this.Etiqueta = etiqueta; this.ImageIndex = imageIndex; } public override string ToString() { return Etiqueta; }}Nada más, ahora lo ... More About: Genes
Patrones de Diseño: Singleton
2007-03-22 13:14:00 Este post marca el inicio de una serie que cubrirá los 23 patrones de diseño definidos en el libro "Design Patterns: Elements of Reusable Object Oriented Software" de Gamma, Helm, Johnson y Vlissides, más conocidos como La Banda de los Cuatro (Gang of Four o GoF). Empezaré con uno de los patrones más fáciles de implementar: el Patrón Singleton . Según el libro de Dessign Patterns, el propósito del patrón Singleton es: Asegurarse que una clase tiene solamente una instancia, y provee un punto de acceso global a ella. Conozco dos formas de implementar este patrón: Hacer privados los constructores de la clase e implementar un método estático que cree las instancias. Implementar los mecanismos de control en los constructores de la clase. Se recomienda usar el primer enfoque, porque es preferible tener un método especializado que implemente el patrón Singleton y dejar que el constructor haga las cosas que se supone que debe hacer: Inicializar las propiedades ... More About: Patron
ALBI abrió sus puertas
2007-03-20 16:17:00 Como se habia anunciado, ayer lunes 19 la Academia Latinoamericana de Business Intelligence (ALBI) abrió sus puertas. Se trata de otra propuesta de capacitación gratuita por parte de Microsoft. Los objetivos de la Academia son:Enseñar a optimizar la toma de decisiones en un entorno altamente competitivo. Ayudar a comprender la necesidad de analizar la información en tiempo y forma para tomar las decisiones adecuadas, que aseguren a la compañía llegar a los objetivos planificados.La ALBI sigue los mismos lineamientos de los otros programas de capacitación de MS, como el Desarrollador 5 estrellas, el Profesional 5 Estrellas o la Academia NetProtector. Es decir que es un programa en que el estudiante consigue recompensas a medida que avanza en el curso. En el caso de la ALBI, el estudiante obtiene una medalla por cada nivel que supera. El programa completo consta de 4 niveles, que van del Nivel 0 al Nivel 3. El Nivel 0 se alcanza al inscribirse al programa, obteniendo asi la pri...
Capítulo II: XBindingList se vuelve ordenada
2007-03-16 12:54:00 En el anterior post, vimos como crear la clase XBindingList e implementamos la característica de búsqueda.Ahora continuaremos con la implementacion de XBindingList añadiendo la opción de ordenación.Como vimos anteriormente, la forma de añadir prestaciones a una clase derivada de BindingList es solapando métodos y propiedades. Para el caso específico de la ordenación, trabajaremos con las propiedades SupportsSortingCore, SortPopertyCore, SortDirectionCore, IsSortedCore y el método ApplySortCorePrimero debemos informar al mundo que nuestra colección soporta ordenación, para ello solapamos la propiedad SupportSortingCore, asi:protected override bool SupportsSortingCore{ get { return true; }}Ahora debemos solapar las tres propiedades en las que almacenamos el estado actual de la ordenación: IsSortedCore, SortDirectionCore y SortPropertyCore. IsSortedCore nos sirve para determinar si la colección está actualmente ordenada o no.SortDirectionCore determina el...
El prefijo sp_: Usar o no usar... esa es la cuestión
2007-03-13 22:23:00 Dando un vistazo a los procedimientos almacenados que incorpora SQL Server, nos damos cuenta que sus nombres siguen una misma convención: Todos empiezan con 'sp_', asi tenemos sp_configure, sp_tables sp_columns, sp_help, sp_who, etc.Nuestro primer instinto nos sugiere que 'sp' significa 'Stored Procedure', por tanto pensamos que lo mejor que podemos hacer es seguir la misma convención y comenzamos a crear procedimientos almacenados con nombres como sp_factura_insert, sp_empleado_delete, sp_salario_select, etc.A primera vista parece que todo funciona adecuadamente, creamos los procedimientos, los ejecutamos sin problemas y obtenemos los resultados esperados. Ahora.. la cruda realidad: Usar el prefijo sp_ para nombrar nuestros procedimientos almacenados NO es la mejor idea.La razón es muy simple: SQL Server reconoce el prefijo sp_ como 'System Stored Procedure', es decir, un procedimiento almacenado de Sistema. Esa caracter'istica influye en la estrategia que SQL Server ut...
XBindingList: Un BindingList con esteroides
2007-03-08 16:00:00 Una de las clases del .NET Framework que utilizo con más frecuencia es BindingList.Como saben, BindingList es una colección genérica optimizada para servir como origen de datos para controles como el DataGridView y otros.Es de gran utilidad, pero no están implementadas 3 características deseables: Búsqueda, Ordenación y Filtrado.Mostraré la forma de crear una clase derivada de BindingList que implemente estas prestaciones. Como es un tema mas o menos extenso, irá desglosado en varios posts.A falta de un mejor nombre, llamaré a esta clase XBindingList.Definamos primero una clase Persona (ID, Nombre, Fecha de Nacimiento) que usaremos para nuestras pruebas.public class Persona{ private int _id; private string _nombre; private DateTime _fechaNacimiento; public int Id { get { return _id; } set { _id = value; } } public string Nombre { get { return _nombre; } set { _nombre = value; } } public DateTime FechaNacimiento { get { return ...
MS SQL Server 2005 Service Pack 2
2007-02-28 17:34:00 Microsoft ha liberado el segundo Service Pack para el SQL Serve r . A decir de MS se han corregido muchos errores e introducido mejoras en Analysis Services, Reporting Services, Integration Services, etc. Este service pack puede ser descargado aqui:Service Pack 2 de SQL ServerService Pack 2 de SQL Server ExpressTambién se han actualizado los Books online que pueden ser descargados aqui:SQL Server Books online (Febrero 2007)
Sincronizar el desplazamiento de dos DataGridViews
2007-02-26 22:01:00 Uno siempre aprende nuevas cosas colaborando en los foros.Hoy un compañero preguntó como se podia tener dos DataGridViews con las columnas visibles sincronizadas, es decir, que si uno se desplaza horizontalmente utilizando el scrollbar de uno de los datagridviews, el otro también se desplace exactamente igual que el primeroLa solución resultó ser bastante simple, todo es cuestión de actualizar la propiedad HorizontalScrollingOffset de un DataGridView, desde el evento Scroll del otro.Primero manejamos el evento Scroll del dataGridView1, actualizando la propiedad HorizontalScrollingOffset del dataGridView2, asi:private void dataGridView1_Scroll(object sender, ScrollEventArgs e){ dataGridView2.HorizontalScrollingOffset = e.NewValue;}ahora a la inversa:private void dataGridView2_Scroll(object sender, ScrollEventArgs e){ dataGridView1.HorizontalScrollingOffset = e.NewValue;}Nada más, ahora podremos desplazarnos con el scrollbar de cualquiera de de los datagridviews y el otro s... More About: Cron , Plaza
Mas Trafico en el Blog
2007-02-22 14:48:00 Retomo el blog luego de unas cortas vacaciones quasi obligadas por un viaje de trabajo y las infaltables fiestas carnavaleras.Atraer más tráfico a nuestro sitio es siempre una preocupación, y googleando por ahí encontré este blog con varios consejos para tal efecto. Algunos de ellos son más útiles que otros, pero vale la pena leerlos todos, ahi les va el linkhttp://www.blogmundi.com/2006/06/04/5 6-formas-de-atraer-trfico-a-tu-blog/Salud os More About: Blog , Trafic
Infragistics WPF Beta 1
2007-02-09 15:51:00 Fue agradable encontrar esta mañana un mail de Infragistics en que anuncia la disponibilidad de la versión Beta de una colección de controles basados en WPF, se ven realmente bien, y creo que vale la pena probarlos, aqui van unos screenshotsXAMDatagridXAMCarouselListBoxM as detalles: http://www.infragistics.com/hot/wpf.aspx
Apple iPhone
2007-02-08 21:01:00 Ya es noticia vieja, pero no podía dejar de incluir una mención a este nuevo gran 'chiche' de Apple : el iPhone. A primera vista ma llama mucho la atención el diseño: simple y elegante. Ni un solo botón!! todo funciona en base a su pantalla multi-touch. Sirve de reproductor de MP3, Video, Navegador de Internet, y por si fuera poco... también de teléfono. Creo que valdría la pena gastar el dinero que no tengo en conseguir uno cuando esté a la venta :) www.apple.com/iphone More About: Iphone , Apple iphone
WLW - Windows Live Writer
2007-02-07 19:12:00 Como ya dije, me he propuesto tener este blog en permanente actividad. Me gustó mucho el nuevo Blogger Beta, trae muchas ventajas. Por ejemplo, nos evita tener que sumergirnos en las profundidades del código HTML para incluir los links o los anuncios de AdSense, ahora el procedimiento es tan simple como arrastrar y soltar, gran mejoría. Por otro lado, por fin tengo instalado el Windows Live Writer Beta, debo estar entre los últimos en adoptar esta herramienta. Esta herramienta está destinada a hacerles la vida mas facil a los bloggers. tiene un editor muy interesante en que uno escribe los posts, y luego se conecta al sitio del blog para publicar automáticamente las entradas. Soporta múltiples sitios que hostean blogs (blogspot incluido, por supuesto), Este es el primer post que escribo utilizando esta herramienta y me pareció justo dedicarlo (el post) al WLW. WLW puede descargarse libre de costo aqui. El instalador pesa aproximadamente 3.5 Mb (muy liviano para todas las co... More About: Windows Live , Windows Live Writer
Clonar un Control
More articles from this author:2007-02-06 16:08:00 En uno de los foros en que participo, un colega preguntó cual era la forma de crear copias idénticas ('clones') de una Caja de Edición (TextBox) en tiempo de ejecución. Intenté ver si los controles incluían algún constructor que tomara un parámetro tipo Control y creara una copia a partir de éste, lamentablemente los controles no incluyen tal constructor (pienso que sería útil)Aqui planteo la forma de crear 'clones' de un control (en realidad, de cualquier objeto), usando Reflection.Versión C#private void Clonar(object src, object tgt){ PropertyInfo[] props = src.GetType().GetProperties(); foreach (PropertyInfo pi in props) { if (pi.CanWrite) pi.SetValue(tgt, pi.GetValue(src, null), null); }}No hay que olvidar incluir un using System.ReflectionAsumamos que hemos creado un TextBox llamado tbOriginal y hemos personalizado el tipo de letra, el tamaño, etc. Si queremos crear una copia idéntica usando el método Clonar definido antes, usariamos algo... 1, 2 |



