<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>TenerifeDotNet</title>
	<atom:link href="http://tenerifedotnet.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://tenerifedotnet.wordpress.com</link>
	<description>.NET, SQL Server y mas...</description>
	<lastBuildDate>Sun, 08 Mar 2009 16:08:11 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='tenerifedotnet.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>TenerifeDotNet</title>
		<link>http://tenerifedotnet.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://tenerifedotnet.wordpress.com/osd.xml" title="TenerifeDotNet" />
	<atom:link rel='hub' href='http://tenerifedotnet.wordpress.com/?pushpress=hub'/>
		<item>
		<title>control Multimonitor winform y procesos.</title>
		<link>http://tenerifedotnet.wordpress.com/2009/03/08/control-multimonitor-winform-y-procesos/</link>
		<comments>http://tenerifedotnet.wordpress.com/2009/03/08/control-multimonitor-winform-y-procesos/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 16:06:16 +0000</pubDate>
		<dc:creator>tenerifedotnet</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Visual Basic]]></category>

		<guid isPermaLink="false">http://tenerifedotnet.wordpress.com/?p=36</guid>
		<description><![CDATA[ Hola a todos! Hace un tiempo que no escribo nada Nuevo en el blog, mucho trabajo estas semanas y una familia que atender es lo que tienen. Peeero, para que la espera valga la pena, he estado estos últimos días preparando un custom control en .Net 3.5 y VB.NET 2008, sencillito pero útil. Se trata [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tenerifedotnet.wordpress.com&amp;blog=2703794&amp;post=36&amp;subd=tenerifedotnet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p> Hola a todos!</p>
<p align="justify">Hace un tiempo que no escribo nada Nuevo en el blog, mucho trabajo estas semanas y una familia que atender es lo que tienen.</p>
<p>Peeero, para que la espera valga la pena, he estado estos últimos días preparando un custom control en .Net 3.5 y VB.NET 2008, sencillito pero útil. Se trata de un control que nos permitirá listar todos los monitores conectados a nuestro sistema y poder especificar por formulario (o a toda la aplicación) cual queremos usar en cada momento.</p>
<p style="text-align:center;"><img class="size-full wp-image-37 alignnone" title="netmmonitor_1" src="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_1.png?w=235&#038;h=154" alt="netmmonitor_1" width="235" height="154" /><span id="more-36"></span></p>
<p> </p>
<p align="justify">No entrare a los pasos de diseño y creación de un Control, pues son los mismos que los de una aplicación tradicional, la única diferencia es que la salida es un ensamblado .dll y no un ejecutable.</p>
<p align="justify">La clase de vb.net que usamos para saber los monitores del sistema es la screens. Muy util para obtener mucha información de la configuración de pantalla en la que se ejecuta nuestra aplicación o, como en este caso, para añadir soporte multi monitor a nuestro programa.</p>
<p align="justify">En nuestro caso, quería cumplir 3 funciones con este control:</p>
<p align="justify">Poder reutilizar el código de monitores en cualquier aplicación con la implementación mas sencilla posible.</p>
<p align="justify">Abstraer todo el código y funcionalidad de nuestra aplicación y que fuese el control el que se encargase de realizar todo el trabajo.</p>
<p align="justify">Poder obtener un objeto con todos los datos de pantallas del sistema de forma sencilla y sin tener que escribir código.</p>
<p>Para todo esto el control cuenta con 3 variables internas privadas:</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-38" title="netmmonitor_2" src="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_2.png?w=381&#038;h=60" alt="netmmonitor_2" width="381" height="60" /> </p>
<p>  Y para acceder a cada una de una forma correcta publica 3 propiedades públicas, 1 de ellas de tipo read only, al usar properties en vez de variables públicas estas apareceran en la ventana de propiedades del control cuando lo insertemos en un formulario, por lo que cumpliremos nuestro objetivo de no tener que escribir más código.</p>
<p>La primera propiedad es de tipo form y nos servira para controlar el formulario sobre el que queramos trabajar, al ser tan genérico, si nuestra aplicación es mdi y movemos el formulario principal moveremos toda la aplicación.</p>
<p style="text-align:center;"> <img class="aligncenter size-full wp-image-39" title="netmmonitor_3" src="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_3.png?w=782&#038;h=158" alt="netmmonitor_3" width="782" height="158" /></p>
<p>  La segunda propiedad es un array de solo lectura, de tipo STR_Monitores, una estructura propia que contiene todos los parámatros necesarios para trabajar con un monitor:</p>
<p style="text-align:center;"> <img class="aligncenter size-full wp-image-40" title="netmmonitor_4" src="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_4.png?w=303&#038;h=127" alt="netmmonitor_4" width="303" height="127" /></p>
<p style="text-align:left;"> Por medio de la propiedad pública nuestra aplicación podra obtener este array con todos los datos de pantallas conectadas al sistema y podremos usarlas de forma independiente al control, otra vez usando 0 código para obtener los datos.</p>
<p style="text-align:center;"><img class="size-full wp-image-41 alignnone" title="netmmonitor_5" src="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_5.png?w=774&#038;h=154" alt="netmmonitor_5" width="774" height="154" /></p>
<p style="text-align:left;">Por último la tercera propiedad pública nos permitira definir un poco en concreto el comportamiento de nuestro control, pues permite definir si queremos mover el formulario de pantalla, ocupando todo el espacio de la nueva pantalla ó tan solo moverlo sin modificar su tamaño.</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-43" title="netmmonitor_61" src="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_61.png?w=800&#038;h=173" alt="netmmonitor_61" width="800" height="173" /></p>
<p> </p>
<p align="justify">El resto del código del control es muy sencillo, obviando el código de los botones para avanzar y retroceder en el array de mvarMonitores, el código del Form_load que inicializa todos los objetos y obtiene los datos necesarios:</p>
<p align="justify">Este código es muy sencillo, simplemente redimensiona el array mvarMonitores al número de monitores presentes en el sistema (restandole 1, hay que recordar que la propiedad count devuelve el número de elementos en un array, empezando desde 1 y que los arrays tienen base 0), despues recorre la lista AllScreens dentro de la clase Screens para guardar los datos en nuestra estructura, usando una variable int indiceArray para recorrer el array mvarMonitores. Después selecciona el primer elemento del array y lo muestra en nuestra label de información.</p>
<p>Con esto, solo con colocar el control en nuestro formulario, obtendremos una estructura STR_monitores rellena y lista para usar.</p>
<p style="text-align:center;"><img class="size-full wp-image-44  aligncenter" title="netmmonitor_7" src="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_7.png?w=809&#038;h=304" alt="netmmonitor_7" width="809" height="304" /></p>
<p align="justify"><span>Y por último el código del botón que hace que nuestro formulario (el indicado en la propiedad) se mueva de pantalla, es en este momento en el que se tiene en cuenta la propiedad MoverYMaximizar, para tener en cuenta si solo debe moverse o también hay que cambiar el tamaño:</span> </p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-48" title="netmmonitor_81" src="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_81.png?w=826&#038;h=83" alt="netmmonitor_81" width="826" height="83" /> </p>
<p>El código es muy sencillo como veis, si le hemos indicado que mueva y maximice el formulario, simplemente asignara el tamaño del area de trabajo de la pantalla seleccionada a nuestro formulario, y después le asignara la nueva ubicación a nuestro formulario a traves de la propiedad Locatión del mismo.</p>
<p align="justify">Esto es así por que windows trata las pantallas como extensiones de nuestro escritorio, es decir, si tenemos 2 pantallas con una resolución de 1024&#215;768, situada la secundaria a la derecha de la primaria, la esquina superior izquierda de nuestro primer monitor tendría las coordenadas x=0, y=0 y la misma esquina de nuestro segundo monitor tendría las cordenadas x=1024, y=0.</p>
<p align="justify">Como extra os dejo una función muy util, que en mi caso no está incluida dentro del control pues no me era necesaria, pero que puede ser muy ventajosa, Con estas funciones podremos ejecutar un proceso y asignarlo automáticamente al monitor que elijamos (que lo hemos podido obtener con nuestro control):</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-46" title="netmmonitor_9" src="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_9.png?w=887&#038;h=44" alt="netmmonitor_9" width="887" height="44" /></p>
<p> </p>
<p>Y el código para ejecutar un proceso y moverlo a la pantalla que deseemos.</p>
<p style="text-align:center;"> <img class="aligncenter size-full wp-image-47" title="netmmonitor_10" src="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_10.png?w=952&#038;h=128" alt="netmmonitor_10" width="952" height="128" /></p>
<p> La parta más importante es el x.WaitForInputIdle, esta línea detiene la ejecución hasta que nuestro proceso esta listo para recibir ordenes, y entonces le asignamos el nuevo tamaño y la nueva posición.</p>
<p align="justify"> Bien, esto es todo, espero que os sea de ayuda y os divertais tanto como yo realizando este control, os dejo el codigo fuente y el ensamblado compilado para que lo useis libremente, si os es util, no olvideis decir donde lo encontrasteis.</p>
<div id="attachment_52" class="wp-caption aligncenter" style="width: 102px"><a href="http://cid-04bfa582c2993a46.skydrive.live.com/embedrowdetail.aspx/P%c3%bablico/NetMultiMonitor.zip" target="_blank"><img class="size-full wp-image-52  " title="Descargar NetMultiMonitor.zip" src="http://tenerifedotnet.files.wordpress.com/2009/03/_hdvista.png?w=92&#038;h=81" alt="_hdvista" width="92" height="81" /></a><p class="wp-caption-text">Descargar NetMultiMonitor.zip</p></div>
<p align="justify">Un saludo.</p>
<p align="justify">Happy coding!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tenerifedotnet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tenerifedotnet.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tenerifedotnet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tenerifedotnet.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tenerifedotnet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tenerifedotnet.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tenerifedotnet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tenerifedotnet.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tenerifedotnet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tenerifedotnet.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tenerifedotnet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tenerifedotnet.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tenerifedotnet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tenerifedotnet.wordpress.com/36/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tenerifedotnet.wordpress.com&amp;blog=2703794&amp;post=36&amp;subd=tenerifedotnet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tenerifedotnet.wordpress.com/2009/03/08/control-multimonitor-winform-y-procesos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/718f5da0bf9965cffc87503ba734d49d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tenerifedotnet</media:title>
		</media:content>

		<media:content url="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_1.png" medium="image">
			<media:title type="html">netmmonitor_1</media:title>
		</media:content>

		<media:content url="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_2.png" medium="image">
			<media:title type="html">netmmonitor_2</media:title>
		</media:content>

		<media:content url="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_3.png" medium="image">
			<media:title type="html">netmmonitor_3</media:title>
		</media:content>

		<media:content url="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_4.png" medium="image">
			<media:title type="html">netmmonitor_4</media:title>
		</media:content>

		<media:content url="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_5.png" medium="image">
			<media:title type="html">netmmonitor_5</media:title>
		</media:content>

		<media:content url="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_61.png" medium="image">
			<media:title type="html">netmmonitor_61</media:title>
		</media:content>

		<media:content url="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_7.png" medium="image">
			<media:title type="html">netmmonitor_7</media:title>
		</media:content>

		<media:content url="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_81.png" medium="image">
			<media:title type="html">netmmonitor_81</media:title>
		</media:content>

		<media:content url="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_9.png" medium="image">
			<media:title type="html">netmmonitor_9</media:title>
		</media:content>

		<media:content url="http://tenerifedotnet.files.wordpress.com/2009/03/netmmonitor_10.png" medium="image">
			<media:title type="html">netmmonitor_10</media:title>
		</media:content>

		<media:content url="http://tenerifedotnet.files.wordpress.com/2009/03/_hdvista.png" medium="image">
			<media:title type="html">Descargar NetMultiMonitor.zip</media:title>
		</media:content>
	</item>
		<item>
		<title>Parámetros opcionales en procedimientos almacenados, SQL 2000 y 05</title>
		<link>http://tenerifedotnet.wordpress.com/2009/02/12/parametros-opcionales-en-procedimientos-almacenados-sql-2000-y-05/</link>
		<comments>http://tenerifedotnet.wordpress.com/2009/02/12/parametros-opcionales-en-procedimientos-almacenados-sql-2000-y-05/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 21:18:35 +0000</pubDate>
		<dc:creator>ciani</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Stores Procedures]]></category>

		<guid isPermaLink="false">http://tenerifedotnet.wordpress.com/?p=12</guid>
		<description><![CDATA[Muchas veces usamos parametros opcionales en nuestras funciones o procedimientos de Visual Basic, y como sabemos es bastante sencillo, pues debemos saber que es practicamente igual de sencillo usarlo en nuestros procedimientos almacenados de SQL.
<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tenerifedotnet.wordpress.com&amp;blog=2703794&amp;post=12&amp;subd=tenerifedotnet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Buenas noches a todos</p>
<p class="p1">Muchas veces usamos parametros opcionales en nuestras funciones o procedimientos de Visual Basic, y como sabemos es bastante sencillo, pues debemos saber que es practicamente igual de sencillo usarlo en nuestros procedimientos almacenados de SQL</p>
<p class="p1"><span id="more-12"></span></p>
<p class="p1">Pasemos a la práctica:</p>
<p class="p1">Imaginaos que tenemos un procedimiento almacenado que lee clientes de nuestra base de datos:</p>
<pre><span style="color:#0000ff;">CREATE PROCEDURE</span><span class="s1"> LeeClientes</span>
<span style="color:#0000ff;">AS
</span><span class="s2"><span style="white-space:pre;"><span style="color:#0000ff;">	</span></span><span style="color:#0000ff;">SELECT</span></span> IDCliente, RazonSocial
<span class="s2"><span style="white-space:pre;">	</span><span style="color:#0000ff;">FROM</span></span> MyProgram_Clientes
<span style="white-space:pre;">	</span>
<span style="white-space:pre;">	</span><span style="color:#339966;">--EXEC LeeCLientes Devuelve todos los clientes de la base de datos</span>

<span style="font-family:Georgia;line-height:19px;white-space:normal;">Si por el motivo que sea, se alinean Marte y Júpiter con el Sol por ejemplo <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  y necesitamos que nuestro procedimiento en un momento dado, no solo lea clientes sino que se capaz de filtrar por el identificador del cliente, tenemos dos opciones, añadir el parámetro @IDCliente y cambiar todas nuestras llamadas desde nuestro código añadiendo el nuevo parámetro o crear un nuevo procedimiento almacenado que se llame LeeCliente y cambiar las llamadas del código donde necesitemos; O  (si ya se que dije dos opciones pero ahí esta la gracia) añadir el parámetro como un parámetro opcional de nuestro procedimiento, lo que es tan sencillo como:</span></pre>
<pre><span style="color:#0000ff;">CREATE PROCEDURE</span><span class="s1"> LeeClientes</span>
<span style="white-space:pre;">	</span>@IDCliente <span style="color:#0000ff;">AS</span> <span style="color:#0000ff;">int</span> = 0    --Igualando el parámetro a un valor inicial conseguimos que el parámetro se convierta en opcional
<span style="color:#0000ff;">AS
</span><span class="s2"><span style="white-space:pre;"><span style="color:#0000ff;">	</span></span><span style="color:#0000ff;">SELECT</span> </span>IDCliente, RazonSocial
<span class="s2"><span style="white-space:pre;">	</span><span style="color:#0000ff;">FROM</span> </span>MyProgram_Clientes
<span class="s2"><span style="white-space:pre;">	</span><span style="color:#0000ff;">WHERE</span> </span>(MyProgram_Clientes.IDCliente = @IDCliente) OR (@IDCliente = 0)

<span style="white-space:pre;">	</span><span style="color:#339966;">--EXEC LeeCLientes Devuelve todos los clientes de la base de datos
</span><span class="s1"><span style="white-space:pre;"><span style="color:#339966;">	</span></span><span style="color:#339966;">-</span></span><span style="color:#339966;">-EXEC LeeCLientes @IDCliente Devuelve el cliente indicado en el parámtreo @IDCliente</span></pre>
<p class="p7">Como veis es bastante sencillo y bastante útil o espero que así os haya sido</p>
<p class="p9"><em></em></p>
<p class="p10"><strong><em>NOTA</em></strong><em>:  Como no todo puede ser color de rosa, la única pega a esto es que si estamos accediendo desde nuestro programa al SQL mediante OLEBDB no podremos usar esta característica del SQL, necesitaremos otro proveedor de base de datos (SQLClient, SQL Native Client,&#8230;)</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tenerifedotnet.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tenerifedotnet.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tenerifedotnet.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tenerifedotnet.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tenerifedotnet.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tenerifedotnet.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tenerifedotnet.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tenerifedotnet.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tenerifedotnet.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tenerifedotnet.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tenerifedotnet.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tenerifedotnet.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tenerifedotnet.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tenerifedotnet.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tenerifedotnet.wordpress.com&amp;blog=2703794&amp;post=12&amp;subd=tenerifedotnet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tenerifedotnet.wordpress.com/2009/02/12/parametros-opcionales-en-procedimientos-almacenados-sql-2000-y-05/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bb056148ac7dd3aa3eacf35eae248d06?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ciani</media:title>
		</media:content>
	</item>
		<item>
		<title>Obtener acceso a todos los valores de un control solo con su nombre.</title>
		<link>http://tenerifedotnet.wordpress.com/2009/02/10/obtener-acceso-a-todos-los-valores-de-un-control-solo-con-su-nombre/</link>
		<comments>http://tenerifedotnet.wordpress.com/2009/02/10/obtener-acceso-a-todos-los-valores-de-un-control-solo-con-su-nombre/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 21:13:00 +0000</pubDate>
		<dc:creator>tenerifedotnet</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Visual Basic]]></category>

		<guid isPermaLink="false">http://tenerifedotnet.wordpress.com/?p=10</guid>
		<description><![CDATA[Resulta que de vez en cuando, la luna y marte se alinean y nosotros los programadores tenemos que arremangarnos para resolver los líos en que nos metemos....<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tenerifedotnet.wordpress.com&amp;blog=2703794&amp;post=10&amp;subd=tenerifedotnet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Buenas a todos!</p>
<p>Resulta que de vez en cuando, la luna y marte se alinean y nosotros los programadores tenemos que arremangarnos para resolver los líos en que nos metemos&#8230;.<span id="more-10"></span></p>
<p>Uno de estos líos inocentes puede ser que &#8220;alguien&#8221; te pase un string que contiene el nombre de un control que tienes en tu formulario y te dice: &#8220;haz visible ese control que te pase&#8230;.. ahh se me olvidaba, el control puede estar metido dentro de tabpanels, panels o group panels&#8230;. por lo que eso de Form.Controls(&#8220;nombredelcontrol&#8221;) no va&#8230;.&#8221; -_-!</p>
<p>Como si fuese tan facil&#8230;. pues sip, si que lo es, 2 linea de codigo, gracias a nuestro siempre querido reflection!!!</p>
<blockquote><p><span style="font-size:x-small;"><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">Dim</span></span><span style="font-size:x-small;"> obj </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">As</span></span><span style="font-size:x-small;"> </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">Object</span></span><span style="font-size:x-small;"><br />
obj = Owner.GetType().GetField(</span><span style="color:#a31515;font-size:x-small;"><span style="color:#a31515;font-size:x-small;">&#8220;_&#8221;</span></span><span style="font-size:x-small;"> &amp; name,Reflection.BindingFlags.NonPublic </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">Or _</span></span><br />
<span style="font-size:x-small;">                                                          Reflection.BindingFlags.Instance </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">Or _<br />
</span></span><span style="font-size:x-small;">                                                          Reflection.BindingFlags.IgnoreCase).GetValue(Owner)</span></span></p></blockquote>
<p>El primer parámetro de la función GetField es el nombre de control, se le pasa &#8220;_&#8221; porque el nombre en el ensamblado está precedido de &#8220;_&#8221;, sin este no encontrará el control.!<br />
Con esto obj contendra nuestro objeto y podremos modificar, eliminar o cambiar todo lo que queramos, quedando reflejado en nuestro objeto real. Solo con algunas lineas más de código dejaremos nuestro código mucho más reusable&#8230;.</p>
<blockquote><p><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">Public</span></span><span style="font-size:x-small;"> </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">Function</span></span><span style="font-size:x-small;"> EncontrarControl(</span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">ByVal</span></span><span style="font-size:x-small;"> name </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">As</span></span><span style="font-size:x-small;"> </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">String</span></span><span style="font-size:x-small;">, </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">ByVal</span></span><span style="font-size:x-small;"> Owner </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">As</span></span><span style="font-size:x-small;"> Form) </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">As</span></span><span style="font-size:x-small;"> Control<br />
</span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">      Dim</span></span><span style="font-size:x-small;"> obj </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">As</span></span><span style="font-size:x-small;"> </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">Object<br />
</span></span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">      Try</span></span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;"><br />
</span></span><span style="font-size:x-small;">            obj = Owner.GetType().GetField(<span style="color:#a31515;font-size:x-small;"><span style="color:#a31515;font-size:x-small;">&#8220;_&#8221;</span></span><span style="font-size:x-small;"> &amp; name,Reflection.BindingFlags.NonPublic </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">Or _</span></span><br />
<span style="font-size:x-small;">                                                                      Reflection.BindingFlags.Instance </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">Or _<br />
</span></span><span style="font-size:x-small;">                                                                      Reflection.BindingFlags.IgnoreCase).GetValue(Owner)</span></span><span style="font-size:x-small;"><br />
            Owner.GetType().GetFiel()<br />
</span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">            Return</span></span><span style="font-size:x-small;"> (</span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">CType</span></span><span style="font-size:x-small;">(obj, Control))<br />
</span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">      Catch</span></span><span style="font-size:x-small;"> ex </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">As</span></span><span style="font-size:x-small;"> Exception<br />
</span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">            Return</span></span><span style="font-size:x-small;"> </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">Nothing<br />
</span></span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">      End</span></span><span style="font-size:x-small;"> </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">Try<br />
</span></span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">End</span></span><span style="font-size:x-small;"> </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">Function<br />
</span></span></p></blockquote>
<p>Y listo! solo con invocar nuestra función podemos acceder directamente a las propiedades de nuestro control y modificarlo y usarlo:</p>
<blockquote><p> </p>
<div><span style="color:#000000;">EncontrarControl(<span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;"><span style="color:#a31515;font-size:x-small;"><span style="color:#a31515;font-size:x-small;">&#8220;Nombredelcontrol&#8221;</span></span><span style="font-size:x-small;"><span style="color:#000000;">, Form1).Visible</span> = </span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">True</span></span></span></span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;"><br />
</span></span></span></div>
<p> </p>
<p><span style="color:#000000;"> </p>
<p></span> </p></blockquote>
<p> Hasta la próxima.</p>
<p>Happy Coding!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tenerifedotnet.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tenerifedotnet.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tenerifedotnet.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tenerifedotnet.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tenerifedotnet.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tenerifedotnet.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tenerifedotnet.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tenerifedotnet.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tenerifedotnet.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tenerifedotnet.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tenerifedotnet.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tenerifedotnet.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tenerifedotnet.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tenerifedotnet.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tenerifedotnet.wordpress.com&amp;blog=2703794&amp;post=10&amp;subd=tenerifedotnet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tenerifedotnet.wordpress.com/2009/02/10/obtener-acceso-a-todos-los-valores-de-un-control-solo-con-su-nombre/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/718f5da0bf9965cffc87503ba734d49d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tenerifedotnet</media:title>
		</media:content>
	</item>
		<item>
		<title>VSTS 2008 SP1: Problem generating manifest</title>
		<link>http://tenerifedotnet.wordpress.com/2009/02/09/vsts-2008-sp1-problem-generating-manifest/</link>
		<comments>http://tenerifedotnet.wordpress.com/2009/02/09/vsts-2008-sp1-problem-generating-manifest/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 10:08:26 +0000</pubDate>
		<dc:creator>tenerifedotnet</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Visual Studio IDE]]></category>

		<guid isPermaLink="false">http://tenerifedotnet.wordpress.com/?p=3</guid>
		<description><![CDATA[Un gran problema de Visual Studio en sus versiones .NET ( 2003, 2005 y 2008 ) ha sido el manejo de grandes proyectos, presentando errores en el propio IDE o en la compilación/depuración que todavía hoy siguen sin corregirse.
Uno de estos problemas es el "Problem generating manifest. Insufficient memory to continue" que aparece al depurar un proyecto "un poco gordito", sobretodo si tenemos winforms abiertos o varias páginas de codigo.
<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tenerifedotnet.wordpress.com&amp;blog=2703794&amp;post=3&amp;subd=tenerifedotnet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;"><span style="font-size:small;font-family:Tahoma;">Un gran problema de Visual Studio en sus versiones .NET ( 2003, 2005 y 2008 ) ha sido el manejo de grandes proyectos, presentando errores en el propio IDE o en la compilación/depuración que todavía hoy siguen sin corregirse.</span></p>
<p style="text-align:justify;"><span style="font-size:small;font-family:Tahoma;">Uno de estos problemas es el &#8220;Problem generating manifest. Insufficient memory to continue&#8221; que aparece al depurar un proyecto &#8220;un poco gordito&#8221;, sobretodo si tenemos winforms abiertos o varias páginas de codigo.<span id="more-3"></span></span></p>
<p><span style="font-size:small;font-family:Tahoma;">La forma de &#8220;mitigarlo&#8221; en sistemas operativos de 32bits es haciendo que visual studio se &#8220;coma&#8221; mas memoria:</span></p>
<p><span style="font-size:small;font-family:Tahoma;">Windows XP:</span></p>
<p><span style="font-size:small;font-family:Tahoma;">-Hacemos una copia de boot.ini y en el original editamos y añadimos la opción /3GB al final de la linea del S.O. que queramos adaptar a usar más de 2Gb de memoria.</span></p>
<p><span style="font-size:small;font-family:Tahoma;">Windows Vista:</span></p>
<p><span style="font-size:small;font-family:Tahoma;">- Ejecutamos el simbolo de sistema como Admin (de otra forma fallara) y ejecutamos lo siguiente en la linea de comandos: </span></p>
<p class="ForumPostContentText" style="padding-left:30px;"><span style="font-size:small;"><span style="color:#000080;">BCDEDIT /Set IncreaseUserVa 3072</span></span></p>
<p><span style="font-size:small;color:#000000;font-family:Tahoma;">Bien, de esta forma con reiniciar nuestro pequeñin empezara a comerse ese giga extra de memoria que andaba suelto, ahora el objetivo es darselo enterito a visual studio (o por lo menos que pueda acceder a el) Por defecto los ejecutables de 32bits no pueden consumir más de 2Gb de memoria ni acceder a la memoria por encima de 2Gb, por lo que hay que modificar la cabecera de devenv.exe para que al ejecutarse haga lo correcto, tranquilos que no hay que buscar ningun editor hexadecimal&#8230;..</span></p>
<p><span style="font-size:small;font-family:Tahoma;">- Primero copia de seguridad a devenv.exe, por si acaso.</span></p>
<p class="ForumPostContentText"><span style="font-size:x-small;font-family:Tahoma;">- En el Directorio <span style="color:#000080;">VC\Bin</span> encontraremos los archivos editbin y link que debemos copiar a <span style="color:#000080;">Common7\IDE</span> (donde se encuentra devenv.exe)</span></p>
<p><span style="font-size:small;font-family:Tahoma;">- Segundo desde linea de comandos ejecutar: </span></p>
<p class="ForumPostContentText" style="padding-left:30px;"><span style="font-size:small;"><span style="color:#000080;">editbin /LARGEADDRESSAWARE devenv.exe</span></span></p>
<p><span style="font-size:small;color:#000000;font-family:Tahoma;">Y Listo nuestro amado, y querido VSTS2008 SP1 empezara a trabajar aprovechando toda la memoria disponible sin limitaciones (salvo las lógicas), damos un reinicio y ha trabajar, esto puede no reparar definitivamente el problema, pero por lo menos lo soluciona bastante.</span></p>
<p> </p>
<p><span style="font-size:small;font-family:Tahoma;">Un saludo!</span></p>
<p><span style="font-size:small;font-family:Tahoma;">Happy coding!</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tenerifedotnet.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tenerifedotnet.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tenerifedotnet.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tenerifedotnet.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tenerifedotnet.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tenerifedotnet.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tenerifedotnet.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tenerifedotnet.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tenerifedotnet.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tenerifedotnet.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tenerifedotnet.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tenerifedotnet.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tenerifedotnet.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tenerifedotnet.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tenerifedotnet.wordpress.com&amp;blog=2703794&amp;post=3&amp;subd=tenerifedotnet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tenerifedotnet.wordpress.com/2009/02/09/vsts-2008-sp1-problem-generating-manifest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/718f5da0bf9965cffc87503ba734d49d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tenerifedotnet</media:title>
		</media:content>
	</item>
	</channel>
</rss>
