<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://labloguera.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang=""><title type="html">Jonas' Blog</title><subtitle type="html">Hablemos de .Net y la tecnología en general</subtitle><id>http://labloguera.net/blogs/jonas/atom.aspx</id><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/default.aspx" /><link rel="self" type="application/atom+xml" href="http://labloguera.net/blogs/jonas/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2007-05-19T01:33:00Z</updated><entry><title>MSDN Video 2008</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2008/02/12/msdn-video-2008.aspx" /><id>http://labloguera.net/blogs/jonas/archive/2008/02/12/msdn-video-2008.aspx</id><published>2008-02-12T08:48:00Z</published><updated>2008-02-12T08:48:00Z</updated><content type="html">&lt;p&gt;&lt;img src="http://www.desarrollaconmsdn.com/msdn/images/msdn_logo.gif" align="right" hspace="5"&gt; &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;¿Os acordáis de de la aplicación MSDN Video, aquella que se desarrolló para dar a conocer la tecnología .Net allá por&lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt; el 2003? Pues bien, desde hace un tiempo sabía que estaban actualizando el contenido para adaptarlo al framework 3.5 y Visual Studio 2008, lo que me parecía algo estupendo. Pues bien, anoche antes de acostarme decidí dar un paseo por la web de &lt;a href="http://www.desarrollaconmsdn.com/msdn/default.aspx"&gt;desarrolla con MSDN&lt;/a&gt; y sorpresa la mía al encontrarme que ya han publicado &lt;a href="http://www.desarrollaconmsdn.com/msdn/msdnvideo2008.aspx"&gt;MSDN Video 2008&lt;/a&gt;.&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;Esta vez las tecnologías de las que se harán uso son, entre otras, Ajax, Linq, WPF y WCF. Se pretende que sea un proyecto en constante evolución, en el cual cada uno de nosotros podemos aportar nuestro granito de arena. El código fuente del que tenemos disponibilidad es una versión beta y también disponemos de un primer video de introducción en Silverlight. A parte, parece que sacarán un curso online para aprender el modo en el que se han utilizado las nuevas tecnologías que incorpora el framework 3.5. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;Espero que os resulte útil, un saludo.&lt;br&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=11417" width="1" height="1"&gt;</content><author><name>jonas</name><uri>http://labloguera.net/members/jonas.aspx</uri></author><category term=".NET" scheme="http://labloguera.net/blogs/jonas/archive/tags/.NET/default.aspx" /><category term="Noticias" scheme="http://labloguera.net/blogs/jonas/archive/tags/Noticias/default.aspx" /><category term="Desarrollo" scheme="http://labloguera.net/blogs/jonas/archive/tags/Desarrollo/default.aspx" /></entry><entry><title>Como instalar Visual Studio 2008: #@ɝ$%!&#172;&#162;?</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2008/02/09/como-instalar-visual-studio-2008.aspx" /><id>http://labloguera.net/blogs/jonas/archive/2008/02/09/como-instalar-visual-studio-2008.aspx</id><published>2008-02-09T18:20:00Z</published><updated>2008-02-09T18:20:00Z</updated><content type="html">&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;No se si a alguno de vosotros os habrá pasado, pero para mi instalar Visual Studio 2008 se ha convertido en una odisea y después de varios intentos he conseguido realizar una instalación satisfactoria.&lt;br&gt;&lt;br&gt;Primer punto a tener en cuenta y, como suele ser habitual... antes de instalar un nuevo programa es recomendable desinstalar las betas o directamente el programa&amp;nbsp; de instalación te avisa de que antes de instalar una nueva versión tienes que instalar las betas que tengas en tu máquina. &lt;br&gt;&lt;br&gt;Partimos de que mi sistema operativo es un Vista Business con VS2005, SQL Server 2005, Office 2007 entre otros y que antes de instalar Visual Studio 2008 tenia instalada la beta 2. VS2008 no va a ser distinto a cualquier otro programa y al intentar instalarlo sobre alguna pre-release os saldrá un cuadro de dialogo indicando que desinstaleis un determinado numero de componentes (ver imagen inferior). Existe una lista y un orden en el que desinstalar esos productos que podéis visitar &lt;a href="http://msdn2.microsoft.com/en-us/vs2008/bb964521.aspx"&gt;aquí&lt;/a&gt; pero no todos los componentes que tendrás que desinstalar tienen que aparecer en esa lista, por ejemplo, los componentes que a mi me pedía desinstalar no aparecen en esa lista.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="text-align:center;" align="center"&gt;&lt;o:p&gt;&amp;nbsp;&lt;a href="http://labloguera.net/photos/jonas/picture11310.aspx" target="_blank"&gt;&lt;img src="http://labloguera.net/photos/jonas/images/11310/original.aspx" border="0"&gt;&lt;/a&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;Puede ser que desinstales los componentes que os aparezcan en el cuadro de dialogo anterior y que al reiniciar la instalación os vuelva a pedir que desinstaleis otros componentes. De hecho al segundo intento me pidió desinstalar los siguientes hotfixes desde windows update: (KB110806), (KB930264) y (KB929300). Bueno... esto puede ser un poco tortuoso: intentar instalar, desinstalar componentes, volver a instalar... pero esto no es lo más frustrante, ¿qué ocurre cuando quieres desinstalar un componente que aparentemente no tienes instalado? te diriges a Panel de control -&amp;gt; Programas y características y ese componente no aparece en el listado de programas instalados. Por lo visto, esta herramienta te muestra como programas instalados los que quiere. &lt;br&gt;Una posible solución es irte al registro y borrar las entradas a mano, algo poco recomendable y otra opción es desinstalar esos componentes con la herramienta&amp;nbsp; &lt;a href="http://support.microsoft.com/kb/290301"&gt;Windows Installer Clean Up&lt;/a&gt;. Con esta herramienta podréis desinstalar todos componentes necesarios para poder instalar VS2008.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="text-align:center;" align="center"&gt;&lt;o:p&gt;&amp;nbsp;&lt;a href="http://labloguera.net/photos/jonas/picture11308.aspx" target="_blank"&gt;&lt;img src="http://labloguera.net/photos/jonas/images/11308/original.aspx" border="0"&gt;&lt;/a&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p&gt;
&lt;br&gt;&lt;br&gt;Una vez desinstalados todos los &lt;strike&gt;malditos&lt;/strike&gt; componentes que me daban problemas pude iniciar la instalación de VS2008 pero otro problema que encontré fue que, a mitad de la instalación, ésta producía un error y terminaba. Lo que se me ocurrió fue desinstalar Office 2007 porque ya había oído que daba problemas cuando se intenta instalar algún programa teniéndolo instalado. Después de esto si, por fin tenia instalado VS en mi portátil como se puede ver en la imagen!!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align:center;" align="center"&gt;&lt;o:p&gt;&amp;nbsp;&lt;a href="http://labloguera.net/photos/jonas/images/11309/original.aspx" target="_blank"&gt;&lt;img src="http://labloguera.net/photos/jonas/images/11309/780x600.aspx" border="0" height="507" width="661"&gt;&lt;/a&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p&gt;
&lt;br&gt;&lt;br&gt;Aunque tengo que decir... que no todo fueron alegrías. Al crear un nuevo proyecto, ya fuera web, wpf o windows form, VS producía un error y no cargaba el diseñador gráfico. La forma en que resolví este problema, y con este el ultimo, fue instalar las actualizaciones que podemos encontrar en el DVD de VS2008 en la carpeta: WCU\dotNetFramework\dotNetMSP\x86.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align:center;" align="center"&gt;&lt;o:p&gt;&amp;nbsp;&lt;a href="http://labloguera.net/photos/jonas/picture11311.aspx" target="_blank"&gt;&lt;/a&gt;&lt;a href="http://labloguera.net/photos/jonas/picture11311.aspx" target="_blank"&gt;&lt;img src="http://labloguera.net/photos/jonas/images/11311/original.aspx" border="0"&gt;&lt;/a&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Con todo esto conseguí instalar VS2008 y tener un funcionamiento correcto, así que si alguno de vosotros instala VS2008 y tiene alguno de estos problemas, espero que os sean útiles los pasos que yo he seguido para solucionar los problemas que me han ido surgiendo.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=11312" width="1" height="1"&gt;</content><author><name>jonas</name><uri>http://labloguera.net/members/jonas.aspx</uri></author><category term=".NET" scheme="http://labloguera.net/blogs/jonas/archive/tags/.NET/default.aspx" /><category term="Visual Studio" scheme="http://labloguera.net/blogs/jonas/archive/tags/Visual+Studio/default.aspx" /></entry><entry><title>Imprimir un formulario windows form</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2007/10/18/imprimir-un-formulario-windows-form.aspx" /><link rel="enclosure" type="application/octet-stream" length="43911" href="http://labloguera.net/blogs/jonas/attachment/7916.ashx" /><id>http://labloguera.net/blogs/jonas/archive/2007/10/18/imprimir-un-formulario-windows-form.aspx</id><published>2007-10-18T11:44:00Z</published><updated>2007-10-18T11:44:00Z</updated><content type="html">&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;Hace unos cuantos unos (bueno, unas semanas... que no encuentro tiempo para postear!!) necesitaba imprimir unos datos que se encontraban en un formulario y lo lógico sería usar reportes para hacerlo, pero por la falta de tiempo y por no haber trabajado reportes antes necesitaba una solución más rápida, entonces se me ocurrió imprimir el formulario y buscando por la red encontré este &lt;a href="http://support.microsoft.com/kb/890894/es"&gt;artículo&lt;/a&gt; en la knowledge base de Microsoft.&amp;nbsp; Pues bien, en primer lugar lo que hice fue pasar ese código a&amp;nbsp; C# y segundo hacer unas pequeñas variaciones al código para que la impresión del formulario se ajustara más a lo que deseaba. Para probarlo nos creamos un nuevo proyecto para una aplicación windows (en C#) y añadimos la siguiente clase al proyecto (extraída del articulo anterior):&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;
&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;using&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; System;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;using&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; System.Collections.Generic;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;using&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; System.Text;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;using&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; System.Drawing.Printing;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;using&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; System.Drawing;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;using&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; System.Drawing.Drawing2D;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;using&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; System.Drawing.Imaging;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;using&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; System.Runtime.InteropServices;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:teal;"&gt;Win32APICall&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;const&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; DIB_RGB_COLORS = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;const&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; BI_RGB = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;const&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; WHITENESS = 16711778;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:teal;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"user32.dll"&lt;/span&gt;,
EntryPoint = &lt;span style="color:maroon;"&gt;"PrintWindow"&lt;/span&gt;,
SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CharSet =
&lt;span style="color:teal;"&gt;CharSet&lt;/span&gt;.Unicode, ExactSpelling = &lt;span style="color:blue;"&gt;true&lt;/span&gt;, CallingConvention =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;CallingConvention&lt;/span&gt;.StdCall)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:teal;"&gt;UInt32&lt;/span&gt;
PrintWindow(&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hWnd, &lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hDC, &lt;span style="color:blue;"&gt;int&lt;/span&gt;
dwFlags);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:teal;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"gdi32.dll"&lt;/span&gt;,
EntryPoint = &lt;span style="color:maroon;"&gt;"CreateDIBSection"&lt;/span&gt;,
SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CharSet =
&lt;span style="color:teal;"&gt;CharSet&lt;/span&gt;.Unicode, ExactSpelling = &lt;span style="color:blue;"&gt;true&lt;/span&gt;, CallingConvention =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;CallingConvention&lt;/span&gt;.StdCall)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt;
CreateDIBSection(&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hdc, &lt;span style="color:blue;"&gt;ref&lt;/span&gt; &lt;span style="color:teal;"&gt;BITMAPINFOHEADER&lt;/span&gt;
pbmi,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Int32&lt;/span&gt; iUsage, &lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt;
ppvBits, &lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hSection, &lt;span style="color:teal;"&gt;Int32&lt;/span&gt; dwOffset);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:teal;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"gdi32.dll"&lt;/span&gt;,
EntryPoint = &lt;span style="color:maroon;"&gt;"PatBlt"&lt;/span&gt;, SetLastError
= &lt;span style="color:blue;"&gt;true&lt;/span&gt;, CharSet =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;CharSet&lt;/span&gt;.Unicode, ExactSpelling = &lt;span style="color:blue;"&gt;true&lt;/span&gt;, CallingConvention = &lt;span style="color:teal;"&gt;CallingConvention&lt;/span&gt;.StdCall)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; PatBlt(&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hDC, &lt;span style="color:teal;"&gt;Int32&lt;/span&gt;
nXLeft, &lt;span style="color:teal;"&gt;Int32&lt;/span&gt; nYLeft, &lt;span style="color:teal;"&gt;Int32&lt;/span&gt;
nWidth,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Int32&lt;/span&gt; nHeight, &lt;span style="color:teal;"&gt;Int32&lt;/span&gt;
dwRop);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:teal;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"gdi32.dll"&lt;/span&gt;,
EntryPoint = &lt;span style="color:maroon;"&gt;"SelectObject"&lt;/span&gt;,
SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CharSet =
&lt;span style="color:teal;"&gt;CharSet&lt;/span&gt;.Unicode, ExactSpelling = &lt;span style="color:blue;"&gt;true&lt;/span&gt;, CallingConvention =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;CallingConvention&lt;/span&gt;.StdCall)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt;
SelectObject(&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hDC, &lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hObj);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:teal;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"GDI32.dll"&lt;/span&gt;,
EntryPoint = &lt;span style="color:maroon;"&gt;"CreateCompatibleDC"&lt;/span&gt;,
SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CharSet =
&lt;span style="color:teal;"&gt;CharSet&lt;/span&gt;.Unicode, ExactSpelling = &lt;span style="color:blue;"&gt;true&lt;/span&gt;, CallingConvention =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;CallingConvention&lt;/span&gt;.StdCall)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt;
CreateCompatibleDC(&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hRefDC);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:teal;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"GDI32.dll"&lt;/span&gt;,
EntryPoint = &lt;span style="color:maroon;"&gt;"DeleteDC"&lt;/span&gt;,
SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CharSet =
&lt;span style="color:teal;"&gt;CharSet&lt;/span&gt;.Unicode, ExactSpelling = &lt;span style="color:blue;"&gt;true&lt;/span&gt;, CallingConvention =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;CallingConvention&lt;/span&gt;.StdCall)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; DeleteDC(&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hDC);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:teal;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"GDI32.dll"&lt;/span&gt;,
EntryPoint = &lt;span style="color:maroon;"&gt;"DeleteObject"&lt;/span&gt;,
SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CharSet =
&lt;span style="color:teal;"&gt;CharSet&lt;/span&gt;.Unicode, ExactSpelling = &lt;span style="color:blue;"&gt;true&lt;/span&gt;, CallingConvention =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;CallingConvention&lt;/span&gt;.StdCall)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt;
DeleteObject(&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hObj);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:teal;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"User32.dll"&lt;/span&gt;,
EntryPoint = &lt;span style="color:maroon;"&gt;"ReleaseDC"&lt;/span&gt;,
SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CharSet =
&lt;span style="color:teal;"&gt;CharSet&lt;/span&gt;.Unicode, ExactSpelling = &lt;span style="color:blue;"&gt;true&lt;/span&gt;, CallingConvention =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;CallingConvention&lt;/span&gt;.StdCall)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt;
ReleaseDC(&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hWnd, &lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt;
hDC);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:teal;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"User32.dll"&lt;/span&gt;,
EntryPoint = &lt;span style="color:maroon;"&gt;"GetDC"&lt;/span&gt;, SetLastError
= &lt;span style="color:blue;"&gt;true&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CharSet =
&lt;span style="color:teal;"&gt;CharSet&lt;/span&gt;.Unicode, ExactSpelling = &lt;span style="color:blue;"&gt;true&lt;/span&gt;, CallingConvention =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;CallingConvention&lt;/span&gt;.StdCall)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; GetDC(&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hWnd);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:teal;"&gt;StructLayout&lt;/span&gt;(&lt;span style="color:teal;"&gt;LayoutKind&lt;/span&gt;.Sequential,
CharSet = &lt;span style="color:teal;"&gt;CharSet&lt;/span&gt;.Auto)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;struct&lt;/span&gt; &lt;span style="color:teal;"&gt;BITMAPINFOHEADER&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:teal;"&gt;Int32&lt;/span&gt; biSize;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:teal;"&gt;Int32&lt;/span&gt; biWidth;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:teal;"&gt;Int32&lt;/span&gt;
biHeight;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:teal;"&gt;Int16&lt;/span&gt;
biPlanes;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:teal;"&gt;Int16&lt;/span&gt;
biBitCount;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:teal;"&gt;Int32&lt;/span&gt;
biCompression;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:teal;"&gt;Int32&lt;/span&gt;
biSizeImage;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:teal;"&gt;Int32&lt;/span&gt;
biXPelsPerMeter;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:teal;"&gt;Int32&lt;/span&gt;
biYPelsPerMeter;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:teal;"&gt;Int32&lt;/span&gt;
biClrUsed;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:teal;"&gt;Int32&lt;/span&gt;
biClrImportant;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;div style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;Ahora diseñamos el formulario que queremos imprimir y le añadimos un objeto &lt;i&gt;PrintDocument printDocument1&lt;/i&gt; y &lt;i&gt;PrintDialog printDialog1&lt;/i&gt;, nos puede quedar algo como esto, un formulario que muestre información sobre libros (si, &lt;span style="font-weight:bold;"&gt;ya se que es feo,&lt;/span&gt; pero para el propósito que tiene es suficiente):&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p style="text-align:center;" align="center"&gt;&lt;img src="http://labloguera.net/photos/jonas/images/7917/original.aspx" border="0"&gt;&lt;/p&gt;
&lt;p style="text-align:center;" align="center"&gt;&amp;nbsp;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;Después tendríamos que controlar el evento click del botón imprimir para que cuando pulsemos en el boton se imprima el formulario y a parte, tenemos que añadir a nuestro código el método que se encargará de imprimir el formulario (también extraído del articulo del que he hablado más arriba) llamado &lt;span style="font-style:italic;"&gt;OnPrintPage&lt;/span&gt;:&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;private&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; buttonImprimir_Click(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:teal;"&gt;EventArgs&lt;/span&gt;
e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;printDialog1.Document = printDocument1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; ((printDialog1.ShowDialog() == &lt;span style="color:teal;"&gt;DialogResult&lt;/span&gt;.OK))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;printDocument1.PrintPage += &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;PrintPageEventHandler&lt;/span&gt;(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.OnPrintPage);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;printDocument1.Print();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;div style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left:40px;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin-left:40px;"&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;private&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; OnPrintPage(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, System.Drawing.Printing.&lt;span style="color:teal;"&gt;PrintPageEventArgs&lt;/span&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hwndForm;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hwndForm = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Handle;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hdcDIBSection;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hdcRef;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hbmDIBSection;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt; hbmDIBSectionOld;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.&lt;span style="color:teal;"&gt;BITMAPINFOHEADER&lt;/span&gt;
BMPheader;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hdcRef = &lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.GetDC(&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt;.Zero);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hdcDIBSection
= &lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.CreateCompatibleDC(hdcRef);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.ReleaseDC(&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt;.Zero,
hdcRef);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;BMPheader.biBitCount
= 24;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;BMPheader.biClrImportant = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;BMPheader.biClrUsed = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;BMPheader.biCompression
= &lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.BI_RGB;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;BMPheader.biSize
= 40;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;BMPheader.biHeight = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Height;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;BMPheader.biPlanes
= 1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;BMPheader.biSizeImage = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;BMPheader.biWidth = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Width;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;BMPheader.biXPelsPerMeter
= 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;BMPheader.biYPelsPerMeter = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hbmDIBSection
= &lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.CreateDIBSection(hdcDIBSection, &lt;span style="color:blue;"&gt;ref&lt;/span&gt; BMPheader,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.DIB_RGB_COLORS, &lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt;.Zero,
&lt;span style="color:teal;"&gt;IntPtr&lt;/span&gt;.Zero, 0);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;hbmDIBSectionOld = &lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.SelectObject(hdcDIBSection,
hbmDIBSection);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.PatBlt(hdcDIBSection, 0, 0, &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Width, &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Height,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.WHITENESS);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.PrintWindow(hwndForm, hdcDIBSection, 0);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.SelectObject(hdcDIBSection,
hbmDIBSectionOld);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Bitmap&lt;/span&gt; imageFrm;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;imageFrm = &lt;span style="color:teal;"&gt;Image&lt;/span&gt;.FromHbitmap(hbmDIBSection);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;e.Graphics.DrawImage(imageFrm, 0, 0);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.DeleteDC(hdcDIBSection);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Win32APICall&lt;/span&gt;.DeleteObject(hbmDIBSection);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style="margin-left:40px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;Bien con esto ya podemos imprimir nuestro formulario, sencillo, pero vamos a ir un poquito más allá, la verdad es que imprimir el formulario así tal cual puede quedar un poquito feo, entonces lo que podemos hacer es modificar la apariencia del formulario para que se imprima lo que nosotros queramos que se vea. Para eso solo tenemos que cambiar la apariencia antes de imprimir el formulario y después de realizar la impresión devolver al formulario su apariencia original. Para el formulario que hemos creado podríamos, por ejemplo, ocultar el botón de impresión, el marco de la ventana, eliminar el borde de los textboxs y cambiar el color de fondo. El código final para el método &lt;span style="font-style:italic;"&gt;buttonImprimir_Click&lt;/span&gt; sería:&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;private&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; buttonImprimir_Click(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:teal;"&gt;EventArgs&lt;/span&gt;
e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Color&lt;/span&gt; colorFondo = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.BackColor;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;try&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;printDialog1.Document
= printDocument1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;
((printDialog1.ShowDialog() == &lt;span style="color:teal;"&gt;DialogResult&lt;/span&gt;.OK))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//
ocultamos el borde del formulario&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.FormBorderStyle
= &lt;span style="color:teal;"&gt;FormBorderStyle&lt;/span&gt;.None;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//cambiamos
el color de fondo del formulario&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.BackColor
= &lt;span style="color:teal;"&gt;Color&lt;/span&gt;.White;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//quitamos el
borde a los texbox&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;textBox1.BorderStyle = &lt;span style="color:teal;"&gt;BorderStyle&lt;/span&gt;.None;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;textBox2.BorderStyle = &lt;span style="color:teal;"&gt;BorderStyle&lt;/span&gt;.None;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;textBox3.BorderStyle
= &lt;span style="color:teal;"&gt;BorderStyle&lt;/span&gt;.None;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;textBox4.BorderStyle = &lt;span style="color:teal;"&gt;BorderStyle&lt;/span&gt;.None;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;textBox5.BorderStyle
= &lt;span style="color:teal;"&gt;BorderStyle&lt;/span&gt;.None;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;textBox6.BorderStyle = &lt;span style="color:teal;"&gt;BorderStyle&lt;/span&gt;.None;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:green;"&gt;//ocultamos el boton de imprimir&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;buttonImprimir.Visible = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;printDocument1.PrintPage += &lt;span style="color:blue;"&gt;new&lt;/span&gt;
&lt;span style="color:teal;"&gt;PrintPageEventHandler&lt;/span&gt;(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.OnPrintPage);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;printDocument1.Print();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;catch&lt;/span&gt; (&lt;span style="color:teal;"&gt;Exception&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color:maroon;"&gt;"Error
al imprimir"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"Error"&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;MessageBoxButtons&lt;/span&gt;.OK, &lt;span style="color:teal;"&gt;MessageBoxIcon&lt;/span&gt;.Error);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;finally&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//restauramos
las propiedades de los controles&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;this&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.FormBorderStyle
= &lt;span style="color:teal;"&gt;FormBorderStyle&lt;/span&gt;.Sizable;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.BackColor = colorFondo;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;textBox1.BorderStyle
= &lt;span style="color:teal;"&gt;BorderStyle&lt;/span&gt;.FixedSingle;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;textBox2.BorderStyle = &lt;span style="color:teal;"&gt;BorderStyle&lt;/span&gt;.FixedSingle;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;textBox3.BorderStyle
= &lt;span style="color:teal;"&gt;BorderStyle&lt;/span&gt;.FixedSingle;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;textBox4.BorderStyle = &lt;span style="color:teal;"&gt;BorderStyle&lt;/span&gt;.FixedSingle;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;textBox5.BorderStyle
= &lt;span style="color:teal;"&gt;BorderStyle&lt;/span&gt;.FixedSingle;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;textBox6.BorderStyle = &lt;span style="color:teal;"&gt;BorderStyle&lt;/span&gt;.FixedSingle;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;buttonImprimir.Visible
= &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//refrescamos
el form&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Refresh();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-left:40px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left:40px;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;/span&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;Y por si quereis trastear con el código os lo dejo adjunto más abajo, un saludo!!!&lt;/span&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=7916" width="1" height="1"&gt;</content><author><name>jonas</name><uri>http://labloguera.net/members/jonas.aspx</uri></author><category term="C#" scheme="http://labloguera.net/blogs/jonas/archive/tags/C_2300_/default.aspx" /><category term=".NET" scheme="http://labloguera.net/blogs/jonas/archive/tags/.NET/default.aspx" /><category term="Windows Forms" scheme="http://labloguera.net/blogs/jonas/archive/tags/Windows+Forms/default.aspx" /></entry><entry><title> Errores comunes al programar (II de II)</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2007/10/04/errores-comunes-al-programar-ii-de-ii.aspx" /><id>http://labloguera.net/blogs/jonas/archive/2007/10/04/errores-comunes-al-programar-ii-de-ii.aspx</id><published>2007-10-04T20:05:00Z</published><updated>2007-10-04T20:05:00Z</updated><content type="html">
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;Siguiendo en la linea del &lt;a href="http://labloguera.net/blogs/jonas/archive/2007/09/28/Errores-comunes-al-programar-_2800_I-de-II_2900_.aspx"&gt;post anterior&lt;/a&gt;, vamos a comentar dos de los puntos que fueron mencionados, los problemas con operaciones aritméticas y de comparación que, aunque de conocimiento básico no viene nada mal recordar.&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;- &lt;span style="font-weight:bold;"&gt;Operaciones aritméticas.&lt;/span&gt; Supongamos que tenemos un determinado objeto, como pueda ser una imagen, que tiene dimensiones (ancho y alto) y que queremos redimensionarla de tal forma que necesitamos obtener los porcentajes en que se redimensionan para el ancho (width) y alto (height), pues basta con dividir las nuevas dimensiones por las originales:&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:green;"&gt;//valores de
ejemplo&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;int&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;
widthOrigen = 2698;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;int&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;
heightOrigen = 1780;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;int&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; width =
1024;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;int&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; height =
768;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;float&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;
porcentajeW, porcentajeH;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;porcentajeW = (width /
widthOrigen);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;porcentajeH
= (height / heightOrigen);&lt;/span&gt;&lt;/blockquote&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;pero este código no es del todo correcto porque lo que se produce es una división de enteros, por lo que el resultado será un entero aunque luego lo almacenemos en un &lt;span style="font-style:italic;"&gt;float&lt;/span&gt;, para que el resultado de la división sea correcto bastaría con hacer un casting de uno de los operandos, posteriormente el compilador "promociona" el valor de menor precisión al del tipo de mayor precisión, es decir, de &lt;span style="font-style:italic;"&gt;int&lt;/span&gt; a &lt;span style="font-style:italic;"&gt;float&lt;/span&gt;:&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;porcentajeW = (width / (&lt;span style="color:blue;"&gt;float&lt;/span&gt;)widthOrigen);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-left:40px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;porcentajeH
= (height / (&lt;span style="color:blue;"&gt;float&lt;/span&gt;)heightOrigen);&lt;/span&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;- &lt;span style="font-weight:bold;"&gt;Operaciones de comparación.&lt;/span&gt; Esto es algo básico en la programación orientada a objetos, si intentamos comparar dos objetos con el operador de comparación (==) pues no obtendremos el resultado deseado porque lo que hacemos es comparar sus referencias a memoria, solo es válido para los tipos básicos(int, float, string...). Para comparar objetos podemos y/o debemos usar el método &lt;span style="font-style:italic;"&gt;Equals(object obj)&lt;/span&gt;, pero no basta con hacer una llamada a este método, pues obtendríamos el mismo resultado que al usar el operador de comparación. Este método pertenece a la clase object y debe ser sobrescrito en nuestras clases para que compare dos objetos de forma correcta. Supongamos que tenemos una clase llamada &lt;i&gt;Complejo &lt;/i&gt;como la siguiente:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;
&lt;/p&gt;
&lt;blockquote&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span&gt;Complejo&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; a;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; b;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; Complejo(&lt;span style="color:blue;"&gt;int&lt;/span&gt;
a, &lt;span style="color:blue;"&gt;int&lt;/span&gt; b)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.a = a;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.b = b;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:green;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; Equals(&lt;span style="color:blue;"&gt;object&lt;/span&gt;
obj)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;try&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;Complejo&lt;/span&gt;
aux = (&lt;span&gt;Complejo&lt;/span&gt;)obj;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; (&lt;span style="color:blue;"&gt;this&lt;/span&gt;.a == aux.a)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (&lt;span style="color:blue;"&gt;this&lt;/span&gt;.b == aux.b)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;return&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;catch&lt;/span&gt; (&lt;span&gt;InvalidCastException&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// es un
objeto de otro tipo&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;Podemos&lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt; destacar el método &lt;span style="font-style:italic;"&gt;Equals(object obj)&lt;/span&gt;, que no tiene ninguna complejidad, el cual se encarga de sobrescribir la forma predeterminada de comparar dos objetos de tipo &lt;span style="font-style:italic;"&gt;Complejo&lt;/span&gt;. Al compilar, obtendremos una advertencia por no sobrescribir el método &lt;span style="font-style:italic;"&gt;GetHashCode()&lt;/span&gt; así que o lo sobrescribís o pasáis de la advertencia. Por último y para ver la diferencia entre una simple comparación y el método &lt;span style="font-style:italic;"&gt;Equals()&lt;/span&gt; lo mejor es verlo con un ejemplo:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Complejo&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; c1 = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span&gt;Complejo&lt;/span&gt;(2,
5);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Complejo&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; c2 = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span&gt;Complejo&lt;/span&gt;(2,
5);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Complejo&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; c3 = c1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.WriteLine(&lt;span&gt;"c1 = c2: "&lt;/span&gt; + (c1 == c2));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.WriteLine(&lt;span&gt;"c1 = c3: "&lt;/span&gt; + (c1 == c3));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.WriteLine(&lt;span&gt;"c2 = c3: "&lt;/span&gt; + (c2 == c3));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.WriteLine(&lt;span&gt;"c1.Equals(c2): "&lt;/span&gt; + c1.Equals(c2));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.WriteLine(&lt;span&gt;"c1.Equals(c3): "&lt;/span&gt; + c1.Equals(c3));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.WriteLine(&lt;span&gt;"c2.Equals(c3): "&lt;/span&gt; + c2.Equals(c3));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;c3.a = 7;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.WriteLine(&lt;span&gt;"c1 = c2: "&lt;/span&gt; + (c1 == c2));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.WriteLine(&lt;span&gt;"c1 = c3: "&lt;/span&gt; + (c1 == c3));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.WriteLine(&lt;span&gt;"c2 = c3: "&lt;/span&gt; + (c2 == c3));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.WriteLine(&lt;span&gt;"c1.Equals(c2): "&lt;/span&gt; + c1.Equals(c2));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;margin-left:40px;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.WriteLine(&lt;span&gt;"c1.Equals(c3): "&lt;/span&gt; + c1.Equals(c3));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-left:40px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;.WriteLine(&lt;span&gt;"c2.Equals(c3): "&lt;/span&gt; + c2.Equals(c3));&lt;/span&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;div style="margin-left:40px;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin-left:40px;"&gt;&amp;nbsp;&lt;/div&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;¿Cuál es el resultado?&lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=7820" width="1" height="1"&gt;</content><author><name>jonas</name><uri>http://labloguera.net/members/jonas.aspx</uri></author><category term="C#" scheme="http://labloguera.net/blogs/jonas/archive/tags/C_2300_/default.aspx" /><category term="Programaci&amp;#243;n" scheme="http://labloguera.net/blogs/jonas/archive/tags/Programaci_26002300_243_3B00_n/default.aspx" /></entry><entry><title>Errores comunes al programar (I de II)</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2007/09/28/Errores-comunes-al-programar-_2800_I-de-II_2900_.aspx" /><id>http://labloguera.net/blogs/jonas/archive/2007/09/28/Errores-comunes-al-programar-_2800_I-de-II_2900_.aspx</id><published>2007-09-28T08:16:00Z</published><updated>2007-09-28T08:16:00Z</updated><content type="html">
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;M&lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;uchas
veces cometemos errores que se podrían evitar simplemente prestando un
poquito más de atención. Aquí van una serie de errores que podemos
cometer con cierta asiduidad, desde mi punto de vista, y que podríamos
minimizar con un poco de atención:&lt;br&gt;&lt;br&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;-
&lt;b&gt;Copy/paste:&lt;/b&gt; es muy habitual copiar partes de código que pueden
repetirse, por ejemplo, de un método a otro y al que&amp;nbsp; después le
realizamos alguna&lt;/span&gt; &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;pequeña
modificación. Sobre esta base, empezamos a modificar dicho código y de
una idea vamos a otra que a su vez nos conduce a otra, que hace que &lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;nos
olvidemos de la primera idea y de quitar esas linea de código que esta
vez nos resultan inútiles. Hay estudios que afirman que las personas no&lt;/span&gt; &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;pueden realizar más de 7 tareas a la vez, ¿será verdad?&lt;/span&gt;&lt;br&gt;
  &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;/span&gt;&lt;br&gt;
  &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;- &lt;b&gt;Aritmética:&lt;/b&gt; las prisas, que no son nada buenas pueden llevarnos a cometer errores en las operaciones aritméticas&amp;nbsp; pues podemos pasar por alto realizar algún casting necesario con
el que&lt;/span&gt; &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;sin él, obtendríamos un resultado diferente al esperado.&lt;/span&gt;&lt;br&gt;
  &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;/span&gt;&lt;br&gt;
  &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;-
&lt;b&gt;Caracteres especiales:&lt;/b&gt; hay que tener especial cuidado al escribir
código que haga uso de caracteres especiales. Estas escribiendo una
capa de &lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;acceso
a datos para una base de datos cuando haces un &lt;i&gt;... LIKE '*algo*'...&lt;/i&gt; y la
consulta select no devuelve los datos esperados... ¿estás seguro de que &lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;ese carácter especial para indicar una cadena de uno o más caracteres es
&lt;b&gt;*&lt;/b&gt;?¿y si es &lt;b&gt;%&lt;/b&gt;, o cualquier otro? no está de más dar un vistazo rápido a la &lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;referencia de la bbdd con la que se está trabajando.&lt;/span&gt;&lt;br&gt;
  &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;/span&gt;&lt;br&gt;
  &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;-
&lt;b&gt;Comparación de objetos:&lt;/b&gt; no es lo mismo hacer una comparación ( &lt;b&gt;==&lt;/b&gt; ) que
hacer un &lt;i&gt;objecet.Equals(otroObject)&lt;/i&gt;, el&amp;nbsp; resultado producido puede no
ser &lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;el deseado de nuevo.&lt;/span&gt;&lt;br&gt;
  &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;/span&gt;&lt;br&gt;
  &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;-
&lt;b&gt;Error de sintaxis:&lt;/b&gt; posiblemente con mayor incidencia en C# o Java que
en VB puesto que éste último no es Case Sensitive, ¿a quién no se le
olvida &lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;poner
una coma? ¿o poner una palabra en minúscula cuando su primera letra es
mayúscula? escribir una palabra de forma correcta... por el amor de
Dios!! &lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;si
llevamos ¿20? ¿30? ¿40...? años escribiendo y hablando nuestra lengua
materna, como es el castellano en mi caso, y seguimos cometiendo faltas de
  &lt;/span&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;ortografía... cómo no las vamos a cometer cuando pikamos código!!!&lt;/span&gt;&lt;br&gt;
  &lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;/span&gt;&lt;/blockquote&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;br&gt;Éstos
son algunos errores habituales (tomados con algo de humor) a la hora de programar, si ahora mismo
os viene alguno más a la mente dejarlo caer por aquí y... &lt;b&gt;¡¡cuidado al pikar código!!!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;a href="http://www.statcounter.com/" target="_blank"&gt;&lt;img src="http://c33.statcounter.com/2992457/0/bea5e9b8/0/" alt="website statistics" border="0"&gt;&lt;/a&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=7759" width="1" height="1"&gt;</content><author><name>jonas</name><uri>http://labloguera.net/members/jonas.aspx</uri></author><category term="Programaci&amp;#243;n" scheme="http://labloguera.net/blogs/jonas/archive/tags/Programaci_26002300_243_3B00_n/default.aspx" /></entry><entry><title>Recursos para Windows Server 2008</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2007/09/27/recursos-para-windows-server-2008.aspx" /><id>http://labloguera.net/blogs/jonas/archive/2007/09/27/recursos-para-windows-server-2008.aspx</id><published>2007-09-27T14:49:00Z</published><updated>2007-09-27T14:49:00Z</updated><content type="html">&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;p&gt;Haciendo referencia al &lt;a href="http://labloguera.net/blogs/thempra/archive/2007/09/27/virtualizacion-en-windows-2008-rc0-y-mas.aspx"&gt;post&lt;/a&gt; que ha publicado Thempra hoy mismo, os dejo una serie de enlaces con recursos para Windows Server 2008 de los que he sabido no hace mucho, espero que os sean útlies:&lt;/p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.technet.com/davidcervigon/archive/2007/09/27/cursos-online-y-libros-gratuitos-de-windows-server-2008.aspx" target="_blank"&gt;http://blogs.technet.com/davidcervigon/archive/2007/09/27/cursos-online-y-libros-gratuitos-de-windows-server-2008.aspx&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/davidcervigon/archive/2007/09/25/como-instalar-windows-server-virtualization-en-la-rc0-de-windows-server-2008.aspx" target="_blank"&gt;http://blogs.technet.com/davidcervigon/archive/2007/09/25/como-instalar-windows-server-virtualization-en-la-rc0-de-windows-server-2008.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/davidcervigon/archive/2007/09/21/como-conseguir-betas-y-productos-de-evaluacion.aspx" target="_blank"&gt;http://blogs.technet.com/davidcervigon/archive/2007/09/21/como-conseguir-betas-y-productos-de-evaluacion.aspx&lt;/a&gt; &lt;br&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=7761" width="1" height="1"&gt;</content><author><name>jonas</name><uri>http://labloguera.net/members/jonas.aspx</uri></author><category term="Windows" scheme="http://labloguera.net/blogs/jonas/archive/tags/Windows/default.aspx" /></entry><entry><title>&#191;C&#243;mo saber el Framework .Net que tenemos instalado?</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2007/09/25/_BF00_C_F300_mo-saber-el-framework-net-que-tenemos-instalado_3F00_.aspx" /><id>http://labloguera.net/blogs/jonas/archive/2007/09/25/_BF00_C_F300_mo-saber-el-framework-net-que-tenemos-instalado_3F00_.aspx</id><published>2007-09-25T16:00:00Z</published><updated>2007-09-25T16:00:00Z</updated><content type="html">

&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;Imaginemos que desarrollamos una nueva aplicación
en .Net y queremos que esta compruebe la existencia de un framework para .Net
ya que sería un poquito feo que al instalar o ejecutar la aplicación diera un
error por no disponer de un framework instalado y que no diera una alternativa
a dicho suceso.&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;&lt;p&gt;Si nuestra aplicación va a ser desplegada mediante un paquete de instalación, tipo ClickOnce, es fácil saber si esta instalado un determinado framework, podemos obtener más información en el siguiente &lt;a href="http://support.microsoft.com/kb/315291/es" class=""&gt;enlace&lt;/a&gt;&amp;nbsp;o en este &lt;a href="http://www.microsoft.com/spanish/msdn/articulos/archivo/260107/voices/aa964978.mspx" class=""&gt;otro&lt;/a&gt; con información para el Framework 3.0.&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Pero... ¿y si lo qué queremos es distribuir directamente el fichero ejecutable? por ejemplo mediante un CD-Rom, pues tendremos que determinar de alguna forma la existencia o no del Framework .Net y como es evidente no podemos comprobarlo desde .Net. Una forma sería crear una aplicación que hiciera de lanzadera o launcher (en C/C++, VB...) para nuestra aplicación desarrollada en .Net. Otra forma posible, y a la vez sencilla, es comprobar mediante un script si tenemos instalado o no el framework en nuestra máquina.&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Windows da soporte a lenguajes de script (JScrip o VBScript) mediante &lt;a href="http://msdn2.microsoft.com/en-us/library/9bbdkx3k.aspx" class=""&gt;WSH&lt;/a&gt; (Windows Scripting Host o Windows Script Host) que viene instalado por defecto desde Windows 98 e Internet Explorer 5. WSH lo que nos permite es realizar scripts para la automatización de tareas, algo que seguro los administradores de sistemas Windows&amp;nbsp;habrán agradecido en cierta medida.&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Volviendo a lo que estamos tratando en este post, para poder comprobar la existencia del framework utilizaremos un script que comprueba si existen una/s determinada/s clave/s en el registro de Windows que hace/n referencia al Framework .Net y sus distintas versiones. En el siguiente &lt;a href="http://www.codeproject.com/useritems/frameworkversiondetection.asp" class=""&gt;enlace&lt;/a&gt; tenemos información detallada de qué claves hacen referencia a cada una de las versiones&lt;br&gt;del .Net Framework desde la versión 1.0 a la 3.5 y como podemos trabajar con ellas desde código manejado. Particularmente, yo accederé a la clave que hace referencia al Framework 2.0:&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Install&lt;/i&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Y el código del script en VBScript (nombre.vbs) es el siguiente:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;span style="font-size:10pt;font-family:Arial;"&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:navy;font-family:Arial;"&gt;&lt;i&gt;set WshShell=WScript.CreateObject("WScript.Shell")&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:navy;font-family:Arial;"&gt;&lt;o:p&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:navy;font-family:Arial;"&gt;&lt;i&gt;On Error Resume Next&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:navy;font-family:Arial;"&gt;&lt;i&gt;valor = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727\Install")&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:navy;font-family:Arial;"&gt;&lt;i&gt;If valor = 1 Then&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:navy;font-family:Arial;"&gt;&lt;i&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;valor=Msgbox("Tienes el Framework 2.0",vbYes)&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:navy;font-family:Arial;"&gt;&lt;i&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;‘o lanzar la aplicación: &lt;span&gt;WshShell.Run("directorio\aplicacion", …)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:navy;font-family:Arial;"&gt;&lt;i&gt;End If&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:navy;font-family:Arial;"&gt;&lt;i&gt;If valor = 0 Then&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:navy;font-family:Arial;"&gt;&lt;i&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;valor=Msgbox("No tienes el Framework 2.0",vbYes)&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;text-indent:36pt;"&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:navy;font-family:Arial;"&gt;&lt;i&gt;‘otra opcion lanzar un navegador para descargar e instalar el framework necesario&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:navy;font-family:Arial;"&gt;&lt;i&gt;End If&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&amp;nbsp;

&lt;p class="MsoNormal"&gt;&lt;span style="font-family:'MS Reference Sans Serif','sans-serif';"&gt;
&lt;p&gt;&lt;br&gt;Bien, en la primera linea declaramos un objeto de tipo &lt;i&gt;WScript.Shell&lt;/i&gt;, este objeto aporta funciones para obtener información acerca de las características del sistema y de las variables del entorno, así como trabajar con el registro, que es lo que hacemos más abajo, y con accesos directos. Después, dependiendo de si el valor devuelto al leer el registro es 1 ó 0, se ejecutará nuestra aplicación o tendremos una alternativa para hacer otras cosas como instalar un framework. El script es un ejemplo, pero podríais hacerlo tan complejo como sea necesario.&lt;br&gt;&amp;nbsp;&lt;/p&gt;


&lt;p&gt;Enlaces que pueden resultar de interés:&lt;/p&gt;


&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/technet/scriptcenter/guide/sas_wsh_overview.mspx?mfr=true" class=""&gt;WSH Primer On Microsoft TechNet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.programemos.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=191&amp;amp;Itemid=105" class=""&gt;Manual en castellano para WSH&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms950396.aspx" class=""&gt;Scripting en MSDN&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=7702" width="1" height="1"&gt;</content><author><name>jonas</name><uri>http://labloguera.net/members/jonas.aspx</uri></author><category term=".NET" scheme="http://labloguera.net/blogs/jonas/archive/tags/.NET/default.aspx" /></entry><entry><title>Bater&#237;as de papel</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2007/08/16/bater-as-de-papel.aspx" /><id>http://labloguera.net/blogs/jonas/archive/2007/08/16/bater-as-de-papel.aspx</id><published>2007-08-16T17:00:00Z</published><updated>2007-08-16T17:00:00Z</updated><content type="html">
&lt;p&gt;El equipo del Instituto Politécnico Rensselaer ha desarrollado una pila 
poco más grande que una sello de correo que puede liberar cerca de 2.3 
voltios, energía suficiente para alimentar una pequeña linterna o bombilla y a parte, condensadores de alta capacidad. Es solo un prototipo por el momento pero se espera obtener nuevos avances para en un futuro poder disponer de fuentes de energía más pequeñas y ligeras.&lt;img src="http://labloguera.net/photos/jonas/images/7122/original.aspx" align="right" border="0"&gt;&lt;/p&gt;
&lt;p&gt;Estan compuestas por un 90% de celulosa y una estructura de nanotubo de carbono. Según Robert 
Linhardt (uno de los responsables del proyecto): "Los componentes están molecularmente unidos entre sí. Se imprime el nanotubo de 
carbono sobre el papel, y el conjunto se empapa de electrolitos."&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Estas baterías de papel funcionan incluso si se doblan, enrollan o cortan, lo que permite modificar su formar y controlar su potencia y voltaje según el tamaño y, además tienen un funcionamiento en un amplio rango de temperaturas.&lt;/p&gt;
&lt;p&gt;La batería usa papel con un electrolito y nanotubos de carbono que 
están encajados en el papel. Los nanotubos forman los electrodos, el papel es el 
separador y el electrolito permite el flujo de corriente. Se ha demostrado que la sangre y el sudor son electrolitos adecuados para su funcionamiento, lo que podría traducirse en una posible uso en aplicaciones biológicas y médicas.&lt;br&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;a href="http://www.statcounter.com/" target="_blank"&gt;&lt;img src="http://c30.statcounter.com/2850050/0/88e5702d/0/" alt="statistics" border="0"&gt;&lt;/a&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=7123" width="1" height="1"&gt;</content><author><name>jonas</name><uri>http://labloguera.net/members/jonas.aspx</uri></author><category term="Noticias" scheme="http://labloguera.net/blogs/jonas/archive/tags/Noticias/default.aspx" /><category term="Investigaci&amp;#243;n" scheme="http://labloguera.net/blogs/jonas/archive/tags/Investigaci_26002300_243_3B00_n/default.aspx" /></entry><entry><title>Historial web: nueva funcionalidad de Google!!</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2007/08/02/historial-web-nueva-funcionalidad-de-google.aspx" /><id>http://labloguera.net/blogs/jonas/archive/2007/08/02/historial-web-nueva-funcionalidad-de-google.aspx</id><published>2007-08-02T19:40:00Z</published><updated>2007-08-02T19:40:00Z</updated><content type="html">&lt;p&gt;Recien salida del horno, Google lanza una nueva funcionalidad llamada historial web que nos permite almacenar el historial de busquedas realizadas con la posibilidad de ampliar a las webs visitadas, para esto último hay que hacer uso de la barra de google y tener activada la funcionalidad pagerank. También permite, &lt;strike&gt;por suerte&lt;/strike&gt;, darte de baja en cualquier momento. Ahí va una imagen (pincha en ella para agrandar):&lt;/p&gt;&lt;p&gt;&lt;a href="http://labloguera.net/photos/jonas/images/7038/original.aspx" target="_blank"&gt;&lt;img src="http://labloguera.net/photos/jonas/images/7038/secondarythumb.aspx" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=7039" width="1" height="1"&gt;</content><author><name>jonas</name><uri>http://labloguera.net/members/jonas.aspx</uri></author><category term="Seguridad" scheme="http://labloguera.net/blogs/jonas/archive/tags/Seguridad/default.aspx" /><category term="Noticias" scheme="http://labloguera.net/blogs/jonas/archive/tags/Noticias/default.aspx" /><category term="Sociedad" scheme="http://labloguera.net/blogs/jonas/archive/tags/Sociedad/default.aspx" /></entry><entry><title>Probando Visual Studio 2008</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2007/08/02/probando-visual-studio-2008.aspx" /><id>http://labloguera.net/blogs/jonas/archive/2007/08/02/probando-visual-studio-2008.aspx</id><published>2007-08-02T17:31:00Z</published><updated>2007-08-02T17:31:00Z</updated><content type="html">&lt;p class="MsoNormal" style="text-align:center;" align="center"&gt;&lt;o:p&gt;&amp;nbsp;&lt;img src="http://labloguera.net/photos/jonas/images/7033/original.aspx" border="0"&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Ya sabéis que desde hace unos días está disponible la &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B98A61BA-99B0-40B7-AB6E-5386A2B94217&amp;amp;displaylang=en"&gt;beta 2 de Visual Studio 2008&lt;/a&gt; (codename Orcas) junto con la &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=D2F74873-C796-4E60-91C8-F0EF809B09EE&amp;amp;displaylang=en"&gt;beta 2 de Framework 3.5&lt;/a&gt;. Pues bien, como las versiones beta de cualquier producto pueden generar algún conflicto al intentar instalar una versión posterior del mismo he decidido probarlo sobre una máquina virtual. Para ello descargué el Virtual PC 2007 desde &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=es&amp;amp;FamilyID=04d26402-3199-48a3-afa2-2dc0b40a73b6"&gt;aquí&lt;/a&gt;. Por otro lado, si teneis a mano un CD de &lt;i&gt;Kit de Bienvenida de Imagine Cup&lt;/i&gt;, sí aquel que te mandaban a casa cuando pasabas la fase 1 (test) de la Imagine Cup, ya teneis una máquina virtual en dicho disco (también incorpora Virtual PC 2004) que podreis utilizar directamente para programar, pues viene con VS 2005 y SQL Server 2005 sobre un XP. Así os ahorrareis un tiempo considerable en preparar una maquina virtual, si es que no disponeis de una, para poder hacer uso de ella. Por otro lado y puesto que los fondos de escritorio que vienen de serie con Windows XP son algo &lt;strike&gt;feos&lt;/strike&gt;, os podéis descargar algunos de los fondos de escritorio que vienen con Vista desde la web del &lt;a href="http://www.hamaddarwish.com/"&gt;autor&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=7034" width="1" height="1"&gt;</content><author><name>jonas</name><uri>http://labloguera.net/members/jonas.aspx</uri></author><category term=".NET" scheme="http://labloguera.net/blogs/jonas/archive/tags/.NET/default.aspx" /><category term="Desarrollo" scheme="http://labloguera.net/blogs/jonas/archive/tags/Desarrollo/default.aspx" /></entry><entry><title>Aprovechando la capacidad de procesamiento paralelo de los &#250;ltimos micros</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2007/07/26/aprovechando-la-capacidad-de-procesamiento-paralelo-de-los-ltimos-micros.aspx" /><id>http://labloguera.net/blogs/jonas/archive/2007/07/26/aprovechando-la-capacidad-de-procesamiento-paralelo-de-los-ltimos-micros.aspx</id><published>2007-07-25T22:35:00Z</published><updated>2007-07-25T22:35:00Z</updated><content type="html">&lt;p&gt;Intel libera la biblioteca TBB 2.0 (&lt;a href="http://www.threadingbuildingblocks.org/"&gt;Thread Building Blocks&lt;/a&gt;) que permite generar una capa de abstracción sobre la arquitectura de threads de la plataforma usada, facilitando la programación multinúcleo. Esto es para aprovechar la capacidad que pueden darlos los procesadores de última generación con dos y cuatro nucleos a los que no se les saca todo el rendimiento posible. TBB es una librería en C++ que ahora esta disponible como un proyecto open source bajo licencia GPLv2 junto a la versión que da soporte comercial completo.&lt;/p&gt;&lt;p&gt;&lt;br&gt;La librería soporta, entre otros, los micros Pentium 4, Pentium D, Xeon, Core Duo, Core 2 Duo y procesadores no Intel compatibles con los anteriores. Además esta disponible para sistemas operativos como Windows XP Professional, Server 2003, Vista, Red Had Enterprise, SuSE Enterprise Server, Mandrake 10, Mac OS X 10.4.4 y los compiladores de &lt;b&gt;Visual Studio 2003&lt;/b&gt;, &lt;b&gt;Visual Studio 2005&lt;/b&gt;, compiladores C++ Intel para Windows, Linux y Mac, y GCC. Para mayor detalle de los requisitos software y hardware &lt;a href="http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm"&gt;pincha aquí&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=6990" width="1" height="1"&gt;</content><author><name>jonas</name><uri>http://labloguera.net/members/jonas.aspx</uri></author><category term="Programaci&amp;#243;n" scheme="http://labloguera.net/blogs/jonas/archive/tags/Programaci_26002300_243_3B00_n/default.aspx" /><category term="Software" scheme="http://labloguera.net/blogs/jonas/archive/tags/Software/default.aspx" /><category term="Desarrollo" scheme="http://labloguera.net/blogs/jonas/archive/tags/Desarrollo/default.aspx" /></entry><entry><title>Krugle: buscador de c&#243;digo</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2007/06/03/krugle-buscador-de-c-digo.aspx" /><id>http://labloguera.net/blogs/jonas/archive/2007/06/03/krugle-buscador-de-c-digo.aspx</id><published>2007-06-03T20:06:00Z</published><updated>2007-06-03T20:06:00Z</updated><content type="html">
&lt;p&gt;He encontrado este buscador de código llamado &lt;a href="http://krugle.com/"&gt;Krugle&lt;/a&gt; y que parece bastante interesante la funcionalidad que nos puede aportar. Nos permite buscar contenido entre más de cuarenta lenguajes diferentes y en diferentes áreas como definición de clases y funciones, código fuente, comentarios, llamadas a funciones. A parte de esto, el resultado de una búsqueda lo podemos dividir en código, sites y proyectos, de este modo si encontramos cierto código que nos resulte útil para poder utilizarlo basta con guardarlo en un archivo y agregarlo a proyecto al que queramos o estemos trabajando y si queremos obtener mas información podemos ver al proyecto al que pertenece. También dispone de una serie de &lt;a href="http://corp.krugle.com/product/getplugins"&gt;plug-ins&lt;/a&gt; con los que podemos realizar búsquedas en los navegadores IE y Firefox. Hay otro plug-ins más para &lt;strike&gt;el lado oscuro&lt;/strike&gt; Eclipse con el que podemos realizar búsquedas directamente desde el entorno.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p style="text-align:center;" align="center"&gt;&lt;img src="http://labloguera.net/photos/jonas/images/1292/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;a href="http://www.statcounter.com/" target="_blank"&gt;&lt;img src="http://c26.statcounter.com/counter.php?sc_project=2609171&amp;amp;java=0&amp;amp;security=117c60fc&amp;amp;invisible=0" alt="blog counter" border="0"&gt;&lt;/a&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=1293" width="1" height="1"&gt;</content><author><name>jonas</name><uri>http://labloguera.net/members/jonas.aspx</uri></author><category term="Off-Topic" scheme="http://labloguera.net/blogs/jonas/archive/tags/Off-Topic/default.aspx" /><category term="Programaci&amp;#243;n" scheme="http://labloguera.net/blogs/jonas/archive/tags/Programaci_26002300_243_3B00_n/default.aspx" /></entry><entry><title>WPF: simulando Aero Glass en Windows XP</title><link rel="alternate" type="text/html" href="http://labloguera.net/blogs/jonas/archive/2007/05/31/wpf-simulando-aero-glass-en-windows-xp.aspx" /><link rel="enclosure" type="application/octet-stream" length="147365" href="http://labloguera.net/blogs/jonas/attachment/1287.ashx" /><id>http://labloguera.net/blogs/jonas/archive/2007/05/31/wpf-simulando-aero-glass-en-windows-xp.aspx</id><published>2007-05-31T18:18:00Z</published><updated>2007-05-31T18:18:00Z</updated><content type="html">&lt;p class="MsoNormal"&gt;Uno de los grandes cambios de Windows XP a la versión de
Windows Vista es el nuevo sistema gráfico que éste último incorpora, el cual ha
sido denominado Aero. Se puede decir que Aero de divide en dos niveles, Aero
Basic que ya incorpora una diferencia sustancial respecto a la interfaz gráfica
de Windows XP y, Aero Glass (que no esta soportado por la versión “Home Basic”)
proporciona una funcionalidad mayor como la aplicación de efectos de cristal a
las ventanas o una gestión avanzada de las mismas, a parte de la experiencia
visual que puede resultar más o menos gratificante dependiendo de los gustos
particulares de cada uno.&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;br&gt;Aero Glass hace que los bordes de nuestras ventanas hagan
uso de transparencias para dar la sensación de cómo si estuviésemos viendo a
través de un cristal, que tengamos vistas en miniatura de las aplicaciones que
aparecen minimizadas en la barra de tareas o Windows Flip y Flip 3D. Esta
funcionalidad queda expuesta a&lt;span&gt;&amp;nbsp; &lt;/span&gt;través de
DWM (Desktop Windows Management) que es quien se encarga de componer la
apariencia que tiene el escritorio en cada momento.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Para poder ofrecer al usuario todo esto se
hace uso directo de las aceleradoras gráficas, aquí es donde aparece el WDDM (Windows
Display Diver Model), esta es la interfaz con la que DWM hace uso de los
recursos de las tarjetas gráficas, así que si no disponemos de una gráfica más
o menos reciente que soporte WDDM nos quedaremos sin "apreciar" todos estos
efectos visuales. &lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/04/Aero/Default.aspx?loc=es"&gt;Se puede trabajar directamente con DWM&lt;/a&gt;
pero es solo una posibilidad disponible para Vista, aun así, puesto que
disponemos del Framework 3.0 en Windows XP y haciendo uso de WPF podemos
simular este efecto de transparencia para los bordes de nuestras ventanas,
aunque eso sí, no con la misma espectacularidad.&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;br&gt;Vamos a trabar con Blend, así que creamos un nuevo proyecto de aplicación y listos para empezar con esto. Lo primero que tenemos que hacer
es eliminar el típico marco de las aplicaciones de escritorio de XP. Para ello,
en el objeto &lt;b&gt;Window&lt;/b&gt; activamos la propiedad &lt;b&gt;AllowsTransaprency&lt;/b&gt;, esto hará que
automáticamente la propiedad &lt;b&gt;WindowStyle&lt;/b&gt; cambie a &lt;i&gt;None&lt;/i&gt;, a parte queremos darle
a nuestra ventana el aspecto de borde redondeado con lo que tendremos que
cambiar el valor de la propiedad &lt;b&gt;Background&lt;/b&gt; a un color transparente así no aparecera un pico en las esquinas con el color de fondo de la ventana. El código
quedaría en xaml del siguiente modo:&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:red;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AllowsTransparency&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;True&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:red;"&gt;WindowStyle&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font