<?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/"
	>

<channel>
	<title>elGuille mola &#187; VB.NET</title>
	<atom:link href="http://www.elguillemola.com/index.php/tag/vb-net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.elguillemola.com</link>
	<description>El blog del Guille (www.elguille.info)</description>
	<lastBuildDate>Wed, 08 Feb 2012 11:08:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Descargar archivos de un FTP</title>
		<link>http://www.elguillemola.com/index.php/2011/12/descargar-archivos-de-un-ftp/</link>
		<comments>http://www.elguillemola.com/index.php/2011/12/descargar-archivos-de-un-ftp/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 04:00:30 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[mis cosas]]></category>
		<category><![CDATA[C#Sharp]]></category>
		<category><![CDATA[elguille.info]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2011/12/descargar-archivos-de-un-ftp/</guid>
		<description><![CDATA[Pues eso&#8230; un artículillo &#34;tesnico&#34; para que no digas.. Esto lo publico a raíz de una pregunta en mis foros&#8230; y más que nada porque pensaba que ya lo tenía publicado, pero se ve que no&#8230; ya que tenía un ejemplo para acceder a un servidor FTP pero sólo para listar el contenido de un [...]]]></description>
			<content:encoded><![CDATA[<!--CusAds10--><p>Pues eso&#8230; un artículillo &quot;tesnico&quot; para que no digas..</p>
<p>Esto lo publico a raíz de una pregunta en mis foros&#8230; y más que nada porque pensaba que ya lo tenía publicado, pero se ve que no&#8230; ya que tenía un ejemplo para acceder a un servidor FTP pero sólo para <a href="http://www.elguille.info/net/dotnet/system_net_acceder_ftp.aspx" target="_blank">listar el contenido de un directorio FTP</a>.</p>
<p>La cuestión es que en realidad ese código que publiqué con un par de añadidos sirve para poder descargar un archivo (o fichero) de un directorio FTP y aquí te los mostraré tanto para Visual Basic.NET como para Visual C#.</p>
<p>La clase en cuestión que nos sirve para hacer esto que te comento es FtpWebRequest que está definida en el espacio de nombres System.Net.</p>
<p>Y sin más preámbulos (ni rollos) aquí tienes el código de VB y C#.</p>
<p>¡Que lo descargues bien!</p>
<p>&#160;</p>
<p><b>Código de VB</b></p>
<pre><span style="color: #008000">'------------------------------------------------------------------------------</span>
<span style="color: #008000">' Descargar archivos de un FTP                                      (06/Dic/11)</span>
<span style="color: #008000">'</span>
<span style="color: #008000">' ©Guillermo 'guille' Som, 2011</span>
<span style="color: #008000">'------------------------------------------------------------------------------</span>
<span style="color: #0000ff">Option</span> <span style="color: #0000ff">Strict</span> <span style="color: #0000ff">On</span>
<span style="color: #0000ff">Option</span> Infer <span style="color: #0000ff">On</span>

<span style="color: #0000ff">Imports</span> System
<span style="color: #0000ff">Imports</span> System.Net
<span style="color: #0000ff">Imports</span> System.IO
<span style="color: #0000ff">Imports</span> System.Text

<span style="color: #0000ff">Module</span> Module1

    <span style="color: #0000ff">Sub</span> Main()
        <span style="color: #008000">' En este ejemplo usamos un FTP público y anónimo</span>
        <span style="color: #008000">' pero puedes indicar el que quieras</span>
        descargarFic(<span style="color: #b22222">&quot;ftp://ftp.rediris.es/welcome.msg&quot;</span>, _
                     <span style="color: #b22222">&quot;anonimous@nadie.com&quot;</span>, &quot;&quot;, _
                     <span style="color: #b22222">&quot;E:\pruebas2&quot;</span>)

        Console.WriteLine(<span style="color: #b22222">&quot;descargado&quot;</span>)
        Console.ReadLine()
    <span style="color: #0000ff">End</span> <span style="color: #0000ff">Sub</span>

    <span style="color: #0000ff">Private</span> <span style="color: #0000ff">Sub</span> descargarFic(<span style="color: #0000ff">ByVal</span> ficFTP <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span>, _
                             <span style="color: #0000ff">ByVal</span> user <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span>, <span style="color: #0000ff">ByVal</span> pass <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span>, _
                             dirLocal <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span>)

        <span style="color: #0000ff">Dim</span> dirFtp <span style="color: #0000ff">As</span> FtpWebRequest = <span style="color: #0000ff">CType</span>(FtpWebRequest.Create(ficFTP), FtpWebRequest)

        <span style="color: #008000">' Los datos del usuario (credenciales)</span>
        <span style="color: #0000ff">Dim</span> cr <span style="color: #0000ff">As</span> <span style="color: #0000ff">New</span> NetworkCredential(user, pass)
        dirFtp.Credentials = cr

        <span style="color: #008000">' El comando a ejecutar usando la enumeración de WebRequestMethods.Ftp</span>
        dirFtp.Method = WebRequestMethods.Ftp.DownloadFile

        <span style="color: #008000">' Obtener el resultado del comando</span>
        <span style="color: #0000ff">Dim</span> reader <span style="color: #0000ff">As</span> <span style="color: #0000ff">New</span> StreamReader(dirFtp.GetResponse().GetResponseStream())

        <span style="color: #008000">' Leer el stream (el contenido del archivo)</span>
        <span style="color: #0000ff">Dim</span> res <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span> = reader.ReadToEnd()

        <span style="color: #008000">' Mostrarlo.</span>
        <span style="color: #008000">'Console.WriteLine(res)</span>

        <span style="color: #008000">' Guardarlo localmente con la extensión .txt</span>
        <span style="color: #0000ff">Dim</span> ficLocal <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span> = Path.Combine(dirLocal, Path.GetFileName(ficFTP) &amp; <span style="color: #b22222">&quot;.txt&quot;</span>)
        <span style="color: #0000ff">Dim</span> sw <span style="color: #0000ff">As</span> <span style="color: #0000ff">New</span> StreamWriter(ficLocal, <span style="color: #0000ff">False</span>, Encoding.<span style="color: #0000ff">Default</span>)
        sw.Write(res)
        sw.Close()

        <span style="color: #008000">' Cerrar el stream abierto.</span>
        reader.Close()
    <span style="color: #0000ff">End</span> <span style="color: #0000ff">Sub</span>

    <span style="color: #0000ff">Sub</span> listarFTP(<span style="color: #0000ff">ByVal</span> dir <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span>, <span style="color: #0000ff">ByVal</span> user <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span>, <span style="color: #0000ff">ByVal</span> pass <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span>)
        <span style="color: #0000ff">Dim</span> dirFtp <span style="color: #0000ff">As</span> FtpWebRequest = <span style="color: #0000ff">CType</span>(FtpWebRequest.Create(dir), FtpWebRequest)

        <span style="color: #008000">' Los datos del usuario (credenciales)</span>
        <span style="color: #0000ff">Dim</span> cr <span style="color: #0000ff">As</span> <span style="color: #0000ff">New</span> NetworkCredential(user, pass)
        dirFtp.Credentials = cr

        <span style="color: #008000">' El comando a ejecutar</span>
        dirFtp.Method = <span style="color: #b22222">&quot;LIST&quot;</span>

        <span style="color: #008000">' También usando la enumeración de WebRequestMethods.Ftp</span>
        dirFtp.Method = WebRequestMethods.Ftp.ListDirectoryDetails

        <span style="color: #008000">' Obtener el resultado del comando</span>
        <span style="color: #0000ff">Dim</span> reader <span style="color: #0000ff">As</span> <span style="color: #0000ff">New</span> StreamReader(dirFtp.GetResponse().GetResponseStream())

        <span style="color: #008000">' Leer el stream</span>
        <span style="color: #0000ff">Dim</span> res <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span> = reader.ReadToEnd()

        <span style="color: #008000">' Mostrarlo.</span>
        Console.WriteLine(res)

        <span style="color: #008000">' Cerrar el stream abierto.</span>
        reader.Close()
    <span style="color: #0000ff">End</span> <span style="color: #0000ff">Sub</span>
<span style="color: #0000ff">End</span> <span style="color: #0000ff">Module</span></pre>
<p>&#160;</p>
<p>&#160;</p>
<p><b>Código de C#</b></p>
<pre><span style="color: #008000">//-----------------------------------------------------------------------------</span>
<span style="color: #008000">// Descargar archivos de un FTP                                     (06/Dic/11)</span>
<span style="color: #008000">//</span>
<span style="color: #008000">// ©Guillermo 'guille' Som, 2011</span>
<span style="color: #008000">//-----------------------------------------------------------------------------</span>

<span style="color: #0000ff">using</span> System;
<span style="color: #0000ff">using</span> System.Text;
<span style="color: #0000ff">using</span> System.Net;
<span style="color: #0000ff">using</span> System.IO;

<span style="color: #0000ff">namespace</span> descargar_archivos_FTP_cs
{
    <span style="color: #0000ff">class</span> Program
    {
        <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> Main(<span style="color: #0000ff">string</span>[] args)
        {
            descargarFic(<span style="color: #b22222">&quot;ftp://ftp.rediris.es/welcome.msg&quot;</span>,
                <span style="color: #b22222">&quot;anonimous@nadie.com&quot;</span>, &quot;&quot;, @<span style="color: #b22222">&quot;E:\pruebas2&quot;</span>);

            Console.WriteLine(<span style="color: #b22222">&quot;descargado&quot;</span>);
            Console.ReadLine();
        }

        <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> descargarFic(<span style="color: #0000ff">string</span> ficFTP, <span style="color: #0000ff">string</span> user, <span style="color: #0000ff">string</span> pass, <span style="color: #0000ff">string</span> dirLocal)
        {
            FtpWebRequest dirFtp = ((FtpWebRequest)FtpWebRequest.Create(ficFTP));

            <span style="color: #008000">// Los datos del usuario (credenciales)</span>
            NetworkCredential cr = <span style="color: #0000ff">new</span> NetworkCredential(user, pass);
            dirFtp.Credentials = cr;

            <span style="color: #008000">// El comando a ejecutar usando la enumeración de WebRequestMethods.Ftp</span>
            dirFtp.Method = WebRequestMethods.Ftp.DownloadFile;

            <span style="color: #008000">// Obtener el resultado del comando</span>
            StreamReader reader =
                <span style="color: #0000ff">new</span> StreamReader(dirFtp.GetResponse().GetResponseStream());

            <span style="color: #008000">// Leer el stream</span>
            <span style="color: #0000ff">string</span> res = reader.ReadToEnd();

            <span style="color: #008000">// Mostrarlo.</span>
            <span style="color: #008000">//Console.WriteLine(res);</span>

            <span style="color: #008000">// Guardarlo localmente con la extensión .txt</span>
            <span style="color: #0000ff">string</span> ficLocal = Path.Combine(dirLocal, Path.GetFileName(ficFTP) + <span style="color: #b22222">&quot;.txt&quot;</span>);
            StreamWriter sw = <span style="color: #0000ff">new</span> StreamWriter(ficLocal, <span style="color: #0000ff">false</span>, Encoding.UTF8);
            sw.Write(res);
            sw.Close();

            <span style="color: #008000">// Cerrar el stream abierto.</span>
            reader.Close();
        }

        <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> listarFTP(<span style="color: #0000ff">string</span> dir, <span style="color: #0000ff">string</span> user, <span style="color: #0000ff">string</span> pass)
        {
            FtpWebRequest dirFtp = ((FtpWebRequest)FtpWebRequest.Create(dir));

            <span style="color: #008000">// Los datos del usuario (credenciales)</span>
            NetworkCredential cr = <span style="color: #0000ff">new</span> NetworkCredential(user, pass);
            dirFtp.Credentials = cr;

            <span style="color: #008000">// El comando a ejecutar</span>
            dirFtp.Method = <span style="color: #b22222">&quot;LIST&quot;</span>;

            <span style="color: #008000">// También usando la enumeración de WebRequestMethods.Ftp</span>
            dirFtp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

            <span style="color: #008000">// Obtener el resultado del comando</span>
            StreamReader reader =
                <span style="color: #0000ff">new</span> StreamReader(dirFtp.GetResponse().GetResponseStream());

            <span style="color: #008000">// Leer el stream</span>
            <span style="color: #0000ff">string</span> res = reader.ReadToEnd();

            <span style="color: #008000">// Mostrarlo.</span>
            Console.WriteLine(res);

            <span style="color: #008000">// Cerrar el stream abierto.</span>
            reader.Close();
        }
    }
}</pre>
<p>&#160;</p>
<p>&#160;</p>
<p>Nos vemos.<br />
  <br />Guillermo</p>
<p>&#8230;</p>

<!-- Quick Adsense WordPress Plugin: http://techmilieu.com/quick-adsense -->
<div style="float:left;margin:10px 10px 10px 0;">
<script type="text/javascript"><!--
google_ad_client = "pub-3672683940926460";
/* blog4 336x280, creado 16/08/10 */
google_ad_slot = "6297358154";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>

<div style="font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both"></div>]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2011/12/descargar-archivos-de-un-ftp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>El n&#250;mero de decimales del tipo decimal de SQL Server</title>
		<link>http://www.elguillemola.com/index.php/2011/10/el-numero-de-decimales-del-tipo-decimal-de-sql-server/</link>
		<comments>http://www.elguillemola.com/index.php/2011/10/el-numero-de-decimales-del-tipo-decimal-de-sql-server/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 21:03:45 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[mis cosas]]></category>
		<category><![CDATA[elguille.info]]></category>
		<category><![CDATA[funciones]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[tipos de datos]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[VB10]]></category>
		<category><![CDATA[Visual Basic]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2011/10/el-numero-de-decimales-del-tipo-decimal-de-sql-server/</guid>
		<description><![CDATA[Pues eso&#8230; últimamente estoy &#34;trasteando&#34; en un programa (hecho con Visual Basic 2010) que accede a una base de datos de SQL Server Express 2005 y quisiera ir poniendo por aquí las cosillas que me voy encontrando mientras &#34;tecleo&#34; en ese programa, y lo último que he modificado es esto que te muestro, que no [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso&#8230; últimamente estoy &quot;trasteando&quot; en un programa (hecho con Visual Basic 2010) que accede a una base de datos de SQL Server Express 2005 y quisiera ir poniendo por aquí las cosillas que me voy encontrando mientras &quot;tecleo&quot; en ese programa, y lo último que he modificado es esto que te muestro, que no es que no lo hubiera detectado antes, pero haciendo pruebas hoy he visto que me había dejado &quot;sin optimizar&quot; un campo de una de las tablas.</p>
<p>El tema es el siguiente:</p>
<p>Cuando añades un campo a una tabla de SQL Server (en mi caso con el SQL Server Management Studio 2008 (Express)) y le indicas que es de tipo <strong>decimal</strong>, automáticamente te lo pone de esta forma:</p>
<p><strong>decimal(18, 0)</strong></p>
<p>El 18 es la precisión, o número de dígitos que puede tener este número, y el 0 es la &quot;escala&quot; o número de decimales que puede tener este número.</p>
<p>Como verás cero decimales no es algo que sea demasiado aceptable en valores de tipo moneda, que sí, que podía haber elegido el tipo &quot;<strong>money</strong>&quot; y me hubiese quitado de problemas, pero de haberlo hecho no te estaría contando esto y&#8230; puede que un día te diera por usar el tipo &quot;<strong>decimal</strong>&quot; por aquello de que es el más parecido al tipo &quot;moneda&quot; que tiene el punto net y lo mismo te preguntarías por qué narices me redondea el número cuando lo guarda en la base de datos&#8230; sí, podría ocurrirte esto&#8230; como le ocurrió a uno que me conozco&#8230;</p>
<p>La cuestión es que si quieres usar el tipo &quot;decimal&quot; de SQL Server para que acepte un número de decimales (por ejemplo cuatro decimales) tendrías que declararlo de esta otra forma:</p>
<p><strong>decimal(18, 4)</strong></p>
<p>&#160;</p>
<p>Y debido a que a la hora de usar este valor desde la base de datos el número de dígitos decimales siempre se guarda (aunque sean todos ceros), me he creado una función que recibe un valor de tipo <strong>Object</strong> y lo convierte en cadena (<strong>String</strong>), pero quitando los ceros extras que tenga y en el caso de que el valor &quot;total&quot; sea cero, al menos deje un cero (pero siempre que esté a la izquierda del decimal).</p>
<p>&#160;</p>
<p>Esta función para quitar los ceros extras que añade el SQL Server:</p>
<pre style="background-color: #fafafa"><span style="color: #5c5c5c">''' &lt;summary&gt;</span>
<span style="color: #5c5c5c">''' Convierte un tipo Object en un valor Decimal,</span>
<span style="color: #5c5c5c">''' pero se devuelve como cadena.</span>
<span style="color: #5c5c5c">''' Ese objeto es el valor leído de la base de datos</span>
<span style="color: #5c5c5c">''' Si el contenido es válido se devuelve el valor</span>
<span style="color: #5c5c5c">''' si no, se devuelve una cadena vacía.</span>
<span style="color: #5c5c5c">''' Se quitan los ceros que haya después del signo decimal,</span>
<span style="color: #5c5c5c">''' si no tiene decimales, no se muestran los ceros.</span>
<span style="color: #5c5c5c">''' &lt;/summary&gt;</span>
<span style="color: #0000ff">Friend</span> <span style="color: #0000ff">Function</span> dataDecimal(<span style="color: #0000ff">ByVal</span> obj <span style="color: #0000ff">As</span> <span style="color: #0000ff">Object</span>) <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span>
    <span style="color: #0000ff">If</span> obj <span style="color: #0000ff">Is</span> <span style="color: #0000ff">Nothing</span> <span style="color: #0000ff">OrElse</span> obj.Equals(DBNull.Value) <span style="color: #0000ff">Then</span>
        <span style="color: #0000ff">Return</span> &quot;&quot;
    <span style="color: #0000ff">Else</span>
        <span style="color: #008000">' Conversión extra para evitar &quot;sustos&quot;                 (06/Oct/11)</span>
        <span style="color: #0000ff">Dim</span> d <span style="color: #0000ff">As</span> <span style="color: #0000ff">Decimal</span> = 0
        <span style="color: #0000ff">Decimal</span>.TryParse(obj.ToString, d)
        <span style="color: #0000ff">Return</span> d.ToString.TrimEnd(<span style="color: #b22222">&quot;0&quot;</span>c).TrimEnd({<span style="color: #b22222">&quot;.&quot;</span>c, <span style="color: #b22222">&quot;,&quot;</span>c})

        <span style="color: #008000">'Return CDec(obj).ToString.TrimEnd(&quot;0&quot;c).TrimEnd({&quot;.&quot;c, &quot;,&quot;c})</span>

    <span style="color: #0000ff">End</span> <span style="color: #0000ff">If</span>
<span style="color: #0000ff">End</span> <span style="color: #0000ff">Function</span></pre>
<p>&#160;</p>
<p>Como ves, no me fio de que el valor recibido sea un valor decimal válido, por eso hago algunas comprobaciones.</p>
<p>La primera es saber si el valor pasado como argumento a la función es un valor nulo, ya sea &quot;nulo de punto net&quot; o nulo de base de datos (<strong>DBNull.Value</strong>), en ese caso, la función devuelve una cadena vacía.</p>
<p>La segunda es usar <strong>TryParse</strong> para no producir una excepción (o error) en el caso de que el valor de ese objeto no sea &quot;convertible&quot; a un tipo <strong>Decimal</strong>.</p>
<p>La función TryParse recibe un valor de tipo cadena que será el valor a convertir (en este caso a un tipo Decimal) y en el segundo parámetro le indicamos un valor (por referencia) del mismo tipo al que queremos convertir, de forma que si la conversión falla, se utilice el valor que previamente tenga dicha variable.<br />
  <br />En el caso de que la conversión NO falle, se asignará a la variable de ese segundo argumento el valor que de como resultado la conversión. Por eso debe ser por referencia, para que la variable se pueda modificar dentro de la función.</p>
<p>&#160;</p>
<p>Como queremos quitar todos los ceros que &quot;sobren&quot; por el final, utilizo la función <strong>TrimEnd</strong> al valor convertido (el que tiene la variable <strong>d</strong>) indicándole el carácter que quiero quitar, esa función recibe como parámetro un valor de tipo <strong>Char</strong> indicando qué carácter queremos quitar del final, y como Visual Basic permite indicar los caracteres en la forma &quot;cadena&quot; seguida de la letra c, pues&#8230; eso es lo que he hecho, por tanto <strong>&quot;0&quot;c</strong> significa que es el carácter CERO (o valor 48).</p>
<p>Esto seguramente ya lo sabías, pero&#8230; no está de más una aclaración.</p>
<p>&#160;</p>
<p>Si el valor almacenado en la base de datos no tiene decimales (por ejemplo el número 205) con el TrimEnd que hemos hecho se nos quedaría la coma (o el punto) que indica que hay decimales, por tanto volvemos a hacer un TrimEnd al resultado del TrimEnd anterior, pero en este caso queremos quitar tanto las comas como los puntos, es decir, queremos quitar &quot;dos tipos de caracteres&quot;, en estos casos, la función TrimEnd permite indicar un array (o arreglo o matriz) de caracteres con cada uno de los caracteres a quitar del final de la cadena.<br />
  <br />Los caracteres individuales ya sabes cómo indicarlos, y si lo que quieres indicar es un array, esos caracteres individuales los separas con comas y los incluyes entre llaves: <font size="3" face="Consolas"><strong>{&quot;.&quot;c, &quot;,&quot;c}</strong></font>.</p>
<p>&#160;</p>
<p>Y esto es todo.</p>
<p>&#160;</p>
<p>Sólo me queda decirte cómo lo utilizo:</p>
<p>En mi caso (en este programa que estoy haciendo) lo hago de dos formas:</p>
<p>En una leo el valor de la tabla en un <strong>DataTable</strong> y accedo a cada valor por medio de un objeto que representa a la fila (<strong>DataRow</strong>) a la que estoy accediendo:</p>
<p>&#160;</p>
<pre style="background-color: #fafafa"><span style="color: #0000ff">For</span> <span style="color: #0000ff">Each</span> r <span style="color: #0000ff">As</span> DataRow <span style="color: #0000ff">In</span> dt.Rows
    <span style="color: #0000ff">Dim</span> lvi <span style="color: #0000ff">As</span> <span style="color: #0000ff">New</span> ListViewItem

...

lvi.SubItems.Add(dataDecimal(r(<span style="color: #b22222">&quot;Importe&quot;</span>)))

...</pre>
<p>&#160;</p>
<p>En la otra accedo a los valores por medio de un objeto <strong>SqlDataReader</strong> y básicamente hago lo mismo:</p>
<p>&#160;</p>
<pre style="background-color: #fafafa"><span style="color: #0000ff">Dim</span> re <span style="color: #0000ff">As</span> SqlDataReader = cmd.ExecuteReader()

...

ImporteTextBox.Text = dataDecimal(re(<span style="color: #b22222">&quot;Importe&quot;</span>))

...</pre>
<p>&#160;</p>
<p>Espero que te sea de utilidad.</p>
<p>&#160;</p>
<p>Nos vemos.<br />
  <br />Guillermo</p>
<p>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2011/10/el-numero-de-decimales-del-tipo-decimal-de-sql-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reutilizar un control en otros controles</title>
		<link>http://www.elguillemola.com/index.php/2011/05/reutilizar-un-control-en-otros-controles/</link>
		<comments>http://www.elguillemola.com/index.php/2011/05/reutilizar-un-control-en-otros-controles/#comments</comments>
		<pubDate>Mon, 16 May 2011 20:00:00 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#Sharp]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2011/05/reutilizar-un-control-en-otros-controles/</guid>
		<description><![CDATA[Pues eso&#8230; aquí te voy a explicar cómo usar un mismo control en más de un &#34;contenedor&#34; (o colección de controles), y como comprobarás, en principio, es algo muy simple de hacer (una vez que se sabe cómo hacerlo, claro, que si no&#8230; ¡ja! ya me dirás tú cómo lo harías si nadie lo explicara, [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso&#8230; aquí te voy a explicar cómo usar un mismo control en más de un &quot;contenedor&quot; (o colección de controles), y como comprobarás, en principio, es algo muy simple de hacer (una vez que se sabe cómo hacerlo, claro, que si no&#8230; ¡ja! ya me dirás tú cómo lo harías si nadie lo explicara, pues eso&#8230;)</p>
<p>&#160;</p>
<blockquote><p>Sí, es un tema técnico&#8230; <img src='http://www.elguillemola.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  pero eso no quiere decir que no lo empiece cómo &quot;debe ser&quot;.</p>
</blockquote>
<p>&#160;</p>
<p>A lo que vamos, de lo que se trata es de tener, por ejemplo, un control PictureBox y ese mismo control mostrarlo (o usarlo) en controles diferentes.    <br />En realidad en contenedores de controles o colecciones de controles, que para el caso es lo mismo, además de que en .NET todos los controles pueden tener otros controles dentro (al menos eso es lo que parece o hace suponer al existir en cada objeto de tipo <a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.control.aspx" target="_blank">Control</a> una propiedad llamada <a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.control.controls.aspx" target="_blank">Controls</a> que es un objeto del tipo <a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.control.controlcollection.aspx" target="_blank">ControlCollection</a> (para saber más pulsa en los enlaces y te llevará a la documentación de .NET Framework 4.0).</p>
<p>Para lograr eso lo que tenemos que hacer es añadir el control en cuestión a la colección Controls del contenedor al que lo queremos mover.    <br />Por ejemplo, si tenemos un control del tipo TabControl y cuando pulsamos en la primera y/o la segunda ficha (TabPage), haremos que un control llamado PictureBox1 se añada a esa ficha.     <br />Con el siguiente código (para Visual Basic) lo conseguiremos:</p>
<p>&#160;</p>
<pre style="padding-bottom: 10px; padding-left: 10px; padding-right: 10px; background: #f5f5f5; padding-top: 10px"><span style="color: #0000ff">Private</span> <span style="color: #0000ff">Sub</span> TabControl1_SelectedIndexChanged(<span style="color: #0000ff">ByVal</span> sender <span style="color: #0000ff">As</span> <span style="color: #0000ff">Object</span>, _
                                             <span style="color: #0000ff">ByVal</span> e <span style="color: #0000ff">As</span> EventArgs) _
                                            <span style="color: #0000ff">Handles</span> TabControl1.SelectedIndexChanged

    <span style="color: #0000ff">Select</span> <span style="color: #0000ff">Case</span> TabControl1.SelectedIndex
        <span style="color: #0000ff">Case</span> 0
            TabPage1.Controls.Add(PictureBox1)
        <span style="color: #0000ff">Case</span> 1
            TabPage2.Controls.Add(PictureBox1)
    <span style="color: #0000ff">End</span> <span style="color: #0000ff">Select</span>
<span style="color: #0000ff">End</span> <span style="color: #0000ff">Sub</span></pre>
<p>&#160;</p>
<p>Si prefieres usar C#, utiliza el siguiente código:</p>
<pre style="padding-bottom: 10px; padding-left: 10px; padding-right: 10px; background: #f5f5f5; padding-top: 10px"><span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> tabControl1_SelectedIndexChanged(<span style="color: #0000ff">object</span> sender, EventArgs e)
{
    <span style="color: #0000ff">switch</span> (tabControl1.SelectedIndex)
    {
        <span style="color: #0000ff">case</span> 0:
            tabPage1.Controls.Add(pictureBox1);
            <span style="color: #0000ff">break</span>;

        <span style="color: #0000ff">case</span> 1:
            tabPage2.Controls.Add(pictureBox1);
            <span style="color: #0000ff">break</span>;
    }
}</pre>
<p>&#160;</p>
<p>Si en lugar de añadirlo directamente a una ficha (tabControl) necesitas que esté en otro contenedor, por ejemplo, dentro de un GroupBox, simplemente sustituye el nombre del control que hay justamente antes de Controls.Add por el control que te convenga. Lo mismo ocurre con el control añadido (el que está entre paréntesis después de .Add), puedes añadir cualquier control.</p>
<p>&#160;</p>
<p>Si al ver el código de ejemplo te preguntas algo así:<br />
  <br /><strong>P:</strong> Guille, ¿no crees que sería necesario quitar el control antes de añadirlo a otra colección? ya que de esa forma tendríamos repetido el mismo control en más de una colección.</p>
<p>La respuesta podría ser como esta:<br />
  <br /><strong>R:</strong> Buena pregunta, lo que indica que &quot;has leído el código&quot;, pero no es necesario.</p>
<p>&#160;</p>
<p><strong>¿Por qué no es necesario eliminar un control de una colección antes de añadirla a otra?</strong></p>
<p>Porque el propio .NET se encarga de eso, es decir, si un control se añade a una colección de controles, automáticamente se quita de la que ya estuviera.</p>
<p>Esto no es que lo haya &quot;adivinado&quot; yo, es que está en la documentación del método Add, que por cierto yo no lo había leído hasta después de hacer el proyecto de ejemplo, en el que me dio por probar a ver qué pasaba si no eliminaba previamente el control de la colección, y al ver que no ocurría &quot;nada raro&quot; (es decir, todo funcionaba como debería funcionar) me dio por leer la documentación y esa documentación tiene una nota que dice:</p>
<p>&#160;</p>
<blockquote><p>Un objeto Control sólo se puede asignar a una colección Control.ControlCollection a la vez. Si el Control ya es secundario de otro control, se quita de ese control antes de agregarlo a otro. </p></blockquote>
<p>(el texto anterior está extraído de la ayuda en línea de .NET Framework 4.0 en castellano, concretamente de la definición del <a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.control.controlcollection.add.aspx" target="_blank">método Add de la clase Control.ControlCollection</a>)</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Espero que te sea de utilidad.</p>
<p>&#160;</p>
<p>Nos vemos.<br />
  <br />Guillermo</p>
<p>Publicado con fecha del lunes 16 de mayo a las 22:00, pero en realidad lo acabé de escribir (y publicar) el martes 17 de mayo a las 00:05</p>
<p>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2011/05/reutilizar-un-control-en-otros-controles/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Obtener info de la ventana en la que est&#225; el cursor del rat&#243;n</title>
		<link>http://www.elguillemola.com/index.php/2010/12/obtener-info-de-la-ventana-en-la-que-esta-el-cursor-del-raton/</link>
		<comments>http://www.elguillemola.com/index.php/2010/12/obtener-info-de-la-ventana-en-la-que-esta-el-cursor-del-raton/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 22:00:00 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[mis cosas]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[C#Sharp]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2010/12/obtener-info-de-la-ventana-en-la-que-esta-el-cursor-del-raton/</guid>
		<description><![CDATA[Pues eso&#8230; un ejemplo para Visual Basic .NET y C# de cómo usar funciones del API y de .NET&#8230; no me enrollo, te dejo la descripción y el enlace: &#160; &#160; Obtener info de la ventana en la que está el cursor del ratón Usando funciones del API de Windows (WindowFromPoint y GetWindowText) y clases [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso&#8230; un ejemplo para Visual Basic .NET y C# de cómo usar funciones del API y de .NET&#8230; no me enrollo, te dejo la descripción y el enlace:</p>
<p>&#160;</p>
<div style="background-color: #fffff6; padding-left: 0.5em; padding-right: 0.5em; margin-left: 1em">
<p>&#160;</p>
<p><a href="http://www.elguille.info/NET/API/WindowFromPoint.aspx" target="_blank"><strong>Obtener info de la ventana en la que está el cursor del ratón</strong></a></p>
<p>Usando funciones del API de Windows (WindowFromPoint y GetWindowText) y clases de .NET Framework (Cursor.Position), averiguar el handle de una ventana según la posición del cursor del ratón (mouse) y como ejemplo mostrar el texto de esa ventana y su handle, la ventana puede ser incluso un control.</p>
<p>&#160;</p>
</p></div>
<p>&#160;</p>
<p>Nos vemos.    <br />Guillermo</p>
<p>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2010/12/obtener-info-de-la-ventana-en-la-que-esta-el-cursor-del-raton/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Martes 26, la segunda charla en Monterrey</title>
		<link>http://www.elguillemola.com/index.php/2010/10/martes-26-la-segunda-charla-en-monterrey/</link>
		<comments>http://www.elguillemola.com/index.php/2010/10/martes-26-la-segunda-charla-en-monterrey/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 05:11:00 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[mis cosas]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[VB10]]></category>
		<category><![CDATA[viajes]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2010/10/martes-26-la-segunda-charla-en-monterrey/</guid>
		<description><![CDATA[Pues eso&#8230; que hoy martes 26 de octubre a las 10 de la mañana en el Auditorio Gumersindo Cantú Hinojosa, FACPyA que está en la Av. Universidad s/n, Ciudad Universitaria en San Nicolás de los Garza, México, será la segunda y última charla que daré en el &#34;1er Encuentro Internacional de Tecnología de Información: Haz [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso&#8230; que hoy martes 26 de octubre a las 10 de la mañana en el Auditorio Gumersindo Cantú Hinojosa, FACPyA que está en la Av. Universidad s/n, Ciudad Universitaria en San Nicolás de los Garza, México, será la segunda y última charla que daré en el &quot;1er Encuentro Internacional de Tecnología de Información: Haz Click Piensa en TI&quot;, en esta ocasión el tema será sobre las novedades de Visual Basic 2010.</p>
<p>Espero que en esta ocasión lo pasemos igual o mejor que ayer lunes&#8230; creo que la gente se divirtió además de aprender algunas cosas nuevas&#8230; al menos los que estaban pendientes de la charla (que era la mayoría, todo hay que decirlo&#8230; y estamos hablando de que habría más de 1200 personas&#8230; sí, muchas)</p>
<p>&#160;</p>
<p>Bueno&#8230; nos vemos allí y si no puedes asistir, pues&#8230; ya te contaré por aquí que tal ha ido o también te puedes enterar por mi página de &quot;<a href="http://www.facebook.com/elGuille.info" target="_blank">el Guille info en Facebook</a>&quot;.</p>
<p>&#160;</p>
<p>Nos vemos.    <br />Guillermo</p>
<p>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2010/10/martes-26-la-segunda-charla-en-monterrey/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Buscar un elemento y si no est&#225;, usar el anterior</title>
		<link>http://www.elguillemola.com/index.php/2010/08/buscar-un-elemento-y-si-no-esta-usar-el-anterior/</link>
		<comments>http://www.elguillemola.com/index.php/2010/08/buscar-un-elemento-y-si-no-esta-usar-el-anterior/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 20:43:11 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[mis cosas]]></category>
		<category><![CDATA[C#Sharp]]></category>
		<category><![CDATA[elguille.info]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2010/08/buscar-un-elemento-y-si-no-esta-usar-el-anterior/</guid>
		<description><![CDATA[Pues eso&#8230; otro articulillo/truco que acabo de publicar en mi sitio sobre cómo buscar &#34;algo&#34; y si no se encuentra, quedarse con el anterior, usando instrucciones de LINQ. &#160; Aquí tienes el enlace y la descripción&#8230; &#160; Buscar un elemento y si no está, usar el anterior &#160; Buscar un elemento y si no está, [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso&#8230; otro articulillo/truco que acabo de publicar en mi sitio sobre cómo buscar &quot;algo&quot; y si no se encuentra, quedarse con el anterior, usando instrucciones de LINQ.</p>
<p>&#160;</p>
<p>Aquí tienes el enlace y la descripción&#8230;</p>
<p>&#160;</p>
<div style="padding-bottom: 1em; background-color: #fffff0; padding-left: 1em; padding-right: 1em; margin-left: 2em; padding-top: 0.5em">
<h3><a href="http://www.elguille.info/NET/dotnet/buscar_un_elemento_si_no_esta_usar_el_anterior.aspx">Buscar un elemento y si no está, usar el anterior</a></h3>
<p>&#160;</p>
<p>Buscar un elemento y si no está, usar el anterior&#8230; En este ejemplo he usado LINQ para realizar la búsqueda con Where y accediendo al elemento por medio del método extensor Last.</p>
</p></div>
<p>&#160;</p>
<p>Espero que te sea de utilidad.</p>
<p>&#160;</p>
<p>Nos vemos.    <br />Guillermo</p>
<p>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2010/08/buscar-un-elemento-y-si-no-esta-usar-el-anterior/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Buscar datos con LINQ sin tener en cuenta may&#250;sculas/min&#250;sculas</title>
		<link>http://www.elguillemola.com/index.php/2010/08/buscar-datos-con-linq-sin-tener-en-cuenta-mayusculasminusculas/</link>
		<comments>http://www.elguillemola.com/index.php/2010/08/buscar-datos-con-linq-sin-tener-en-cuenta-mayusculasminusculas/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 21:50:00 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[mis cosas]]></category>
		<category><![CDATA[C#Sharp]]></category>
		<category><![CDATA[elguille.info]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2010/08/buscar-datos-con-linq-sin-tener-en-cuenta-mayusculasminusculas/</guid>
		<description><![CDATA[Pues eso&#8230; un articulillo que acabo de publicar en mi sitio sobre cómo hacer una búsqueda insensible a mayúsculas y/o minúsculas (case insensitive, pero usando instrucciones de LINQ. &#160; Aquí tienes el enlace y la descripción&#8230; &#160; Buscar datos con LINQ sin tener en cuenta mayúsculas/minúsculas &#160; Buscar datos con LINQ sin tener en cuenta [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso&#8230; un articulillo que acabo de publicar en mi sitio sobre cómo hacer una búsqueda insensible a mayúsculas y/o minúsculas (case insensitive, pero usando instrucciones de LINQ.</p>
<p>&#160;</p>
<p>Aquí tienes el enlace y la descripción&#8230;</p>
<p>&#160;</p>
<div style="padding-bottom: 1em; background-color: #fffff0; padding-left: 1em; padding-right: 1em; margin-left: 2em; padding-top: 0.5em">
<h3><a href="http://www.elguille.info/NET/dotnet/buscar_case_insensitive_usando_linq.aspx">Buscar datos con LINQ sin tener en cuenta mayúsculas/minúsculas</a></h3>
<p>&#160;</p>
<p>Buscar datos con LINQ sin tener en cuenta mayúsculas/minúsculas. O lo que es lo mismo buscar datos case insensitive usando instrucciones de LINQ (ya sea para objetos en memoria como los contenidos en los procedentes de una base de datos).</p>
</p></div>
<p>&#160;</p>
<p>Espero que te sea de utilidad.</p>
<p>&#160;</p>
<p>Nos vemos.    <br />Guillermo</p>
<p>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2010/08/buscar-datos-con-linq-sin-tener-en-cuenta-mayusculasminusculas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adaptar nuestra aplicaci&#243;n al tama&#241;o y posici&#243;n del escritorio de Windows</title>
		<link>http://www.elguillemola.com/index.php/2010/08/adaptar-nuestra-aplicacion-al-tamano-y-posicion-del-escritorio-de-windows/</link>
		<comments>http://www.elguillemola.com/index.php/2010/08/adaptar-nuestra-aplicacion-al-tamano-y-posicion-del-escritorio-de-windows/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 23:50:44 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[mis cosas]]></category>
		<category><![CDATA[C#Sharp]]></category>
		<category><![CDATA[elguille.info]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2010/08/adaptar-nuestra-aplicacion-al-tamano-y-posicion-del-escritorio-de-windows/</guid>
		<description><![CDATA[Pues eso&#8230; un articulillo que acabo de publicar en mi sitio sobre cómo saber las coordenadas y tamaño del área utilizable del escritorio de Windows. Aquí tienes el enlace y la descripción&#8230; &#160; Adaptar el formulario al tamaño y posición del escritorio &#160; Cómo averiguar las coordenadas y posición del área de trabajo del escritorio [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso&#8230; un articulillo que acabo de publicar en mi sitio sobre cómo saber las coordenadas y tamaño del área utilizable del escritorio de Windows.</p>
<p>Aquí tienes el enlace y la descripción&#8230;</p>
<p>&#160;</p>
<div style="padding-bottom: 1em; background-color: #fffff0; padding-left: 1em; padding-right: 1em; margin-left: 2em; padding-top: 0.5em">
<h3><a href="http://www.elguille.info/NET/dotnet/adaptar_formulario_tamano_y_posicion_escritorio.aspx">Adaptar el formulario al tamaño y posición del escritorio</a></h3>
<p>&#160;</p>
<p>Cómo averiguar las coordenadas y posición del área de trabajo del escritorio o pantalla del usuario de nuestra aplicación mediante la propiedad WorkingArea de la propiedad PrimaryScreen de la clase Screen.</p>
</p></div>
<p>&#160;</p>
<p>Espero que te sea de utilidad.</p>
<p>&#160;</p>
<p>Nos vemos.    <br />Guillermo</p>
<p>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2010/08/adaptar-nuestra-aplicacion-al-tamano-y-posicion-del-escritorio-de-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Código de ejemplo de Fluent Interface para CSharp y Visual Basic</title>
		<link>http://www.elguillemola.com/index.php/2010/07/codigo-de-ejemplo-de-fluent-interface-para-csharp-y-visual-basic/</link>
		<comments>http://www.elguillemola.com/index.php/2010/07/codigo-de-ejemplo-de-fluent-interface-para-csharp-y-visual-basic/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 03:34:46 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[mis cosas]]></category>
		<category><![CDATA[C#Sharp]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[VB10]]></category>
		<category><![CDATA[VB6]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2010/07/codigo-de-ejemplo-de-fluid-interface-para-csharp-y-visual-basic/</guid>
		<description><![CDATA[Pues eso, que ya está el código de ejemplo para que lo puedas descargar desde mi sitio: .NET/VB6: Código de ejemplo de cómo usar Fluent Interface en C#, Visual Basic .NET y Visual Basic 6.0 Como puedes ver por el título, están los ejemplos para C#, VB.NET y VB6, además el de VB.NET está para [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso, que ya está el código de ejemplo para que lo puedas descargar desde mi sitio:</p>
<p><strong>.NET/VB6:</strong> <a href="http://www.elguille.info/NET/dotnet/FluentInterface_codigo_vbnet_csharp_vb6.aspx">Código de ejemplo de cómo usar Fluent Interface en C#, Visual Basic .NET y Visual Basic 6.0</a></p>
<p>Como puedes ver por el título, están los ejemplos para C#, VB.NET y VB6, además el de VB.NET está para la versión 2010 (VB10) y 2008 (VB9) cuyo código también es válido para la versión 2005 (VB8) y supongo que también para las anteriores, aunque no lo he probado&#8230; aunque lo mismo algún día lo pruebo&#8230; al menos en el VS2003, es decir para VB7.1.</p>
<p>Nos vemos.<br />
Guillermo</p>
<p>P.S.<br />
Si quieres leer el artículo o post que publiqué hace un par de días en este mismo blog, lo puedes hacer desde este enlace:<br />
<strong><a href="http://www.elguillemola.com/index.php/2010/07/fluent-interface-no-es-solo-simular-el-with-de-vb/">Fluent Interface no es solo simular el WITH de VB</a></strong></p>
<p>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2010/07/codigo-de-ejemplo-de-fluent-interface-para-csharp-y-visual-basic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fluent Interface no es solo simular el WITH de VB</title>
		<link>http://www.elguillemola.com/index.php/2010/07/fluent-interface-no-es-solo-simular-el-with-de-vb/</link>
		<comments>http://www.elguillemola.com/index.php/2010/07/fluent-interface-no-es-solo-simular-el-with-de-vb/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 14:45:39 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[mis cosas]]></category>
		<category><![CDATA[C#Sharp]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[VB10]]></category>
		<category><![CDATA[Visual Basic]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2010/07/fluent-interface-no-es-solo-simular-el-with-de-vb/</guid>
		<description><![CDATA[Pues eso, que a raíz de leer un artículo en el blog de mi amigüita Gisela Torres (amiga de feisbúc, ya que no la conozco personalmente aunque en la última cena/reunión de MVP anduvo por allí cerca, pero como yo estaba castigado contra la pared no le vi ni sus ojos&#8230; ya sabes que algunos [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso, que a raíz de leer un artículo en el blog de mi <em>amigüita</em> Gisela Torres (<small>amiga de feisbúc, ya que no la conozco personalmente aunque en la última cena/reunión de MVP anduvo por allí cerca, pero como yo estaba castigado contra la pared no le vi ni sus ojos&#8230; ya sabes que algunos ojos me encandilan, jeje</small>) comentando cómo <a href="http://geeks.ms/blogs/gtorres/archive/2010/07/04/crear-fluent-interfaces-en-c-sharp.aspx">Crear Fluent Interface en C#</a> y en uno de los comentarios al post decían que se parecía mucho al uso de la instrucción (o bloque) WITH de Visual Basic.</p>
<p>Después en la página que tiene <a href="http://www.facebook.com/campusMVP">CampusMVP en feisbúc</a> se vuelve a comentar lo mismo, y en realidad es que ese ejemplo concreto es muy parecido al uso de un <a href="http://msdn.microsoft.com/es-es/library/wc500chb(VS.80).aspx">bloque With de VB</a> (ya sea VB para .NET como el VB6, en ambos existe esa construcción).</p>
<p>&#160;</p>
<h3>El código de ejemplo</h3>
<p>Sin entrar en demasiados detalles (y con el permiso de Gisela) te muestro el código de uso en C# del ejemplo de <a href="http://es.wikipedia.org/wiki/Interfaz_fluida">interfaz fluida</a> (o <a href="http://en.wikipedia.org/wiki/Fluent_interface">fluent interface</a> si lo prefieres en inglés -<small>estos dos enlaces o links son de la wikipedia y en el de español sólo hay ejemplos para C# y C++, mientras que en inglés hay ejemplos para Object Pascal, PHP, Java, JavaScript, C#, etc., eso sí, para VB no hay&#8230; ¡faltaría más!</small>-) que puso en su artículo, y después te muestro el correspondiente en Visual Basic usando un bloque With.</p>
<p>&#160;</p>
<div style="background-color: #fffff0; margin-left: 2em">
<p style="padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em"><strong>Nota:</strong>       <br />Para entender mejor este ejemplo, te recomiendo que veas el código completo que muestra Gisela en su artículo.</p>
</p></div>
<p>&#160;</p>
<p><b>El código de uso de Fluent Interface en C#:</b></p>
<pre><span style="color: #0000ff">new</span> <span style="color: #2b91af">Computer</span>()
    .AddProcessor(<span style="color: #a31515">&quot;Intel i7 920&quot;</span>)
    .AddRAM(6)
    .TurnOn()
    .Test()
    .TurnOff();</pre>
<p>&#160;</p>
<p><strong>El código de uso de Fluent Interface en VB<br />
    <br /></strong>(pero sin crear la interfaz que implementa la clase Computer de C#, por eso en este ejemplo la clase se llama ComputerSimple):</p>
<pre><span style="color: #0000ff">With</span> <span style="color: #0000ff">New</span> <span style="color: #2b91af">ComputerSimple</span>()
    .AddProcessor(<span style="color: #a31515">&quot;Intel i7 920&quot;</span>)
    .AddRAM(6)
    .TurnOn()
    .Test()
    .TurnOff()
<span style="color: #0000ff">End With</span></pre>
<p>&#160;</p>
<p>Como puedes comprobar, escribiendo el código de C# de esa forma es fácil confundirlo con una construcción (o bloque) With de Visual Basic, pero como comenté en la página de CampusMVP: sin End With y con punto y coma&#8230; <img src='http://www.elguillemola.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>&#160;</p>
<p>Aunque ese &quot;parecido&quot; con With es sólo por la forma de escribir ese código en C#, ya que si lo escribiésemos todo junto y sin cambios de líneas, sería lo que se conoce como <strong>encadenamiento de métodos</strong>, de forma que se puede llamar a un método de una clase partiendo de la llamada a otro método y esto no se puede hacer con un With, ya que esa instrucción lo que permite es hacer llamadas a diferentes miembros de un objeto (ya sean métodos, propiedades o cualquier cosa que se pueda usar en un objeto) sin necesidad de tener que indicar el objeto en cuestión, es decir, el With nos permite crear un bloque que hace referencia a un objeto, y al estar dentro del &quot;bloque&quot; podemos acceder a cualquier miembro de ese objeto.</p>
<p>&#160;</p>
<p>El código de llamada a la clase &quot;Computer&quot; que simula un With en C# en realidad se podría escribir así:</p>
<div style="background-color: #fffff0; margin-left: 2em">
<p style="padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em"><strong>Nota:</strong> </p>
<p>En el blog es posible que se corte el código, pero lo que hay después del comentario podría/debería estar en una sola línea. </p>
<p><small>Gracias a mi amigo Dani (Seara) por recordarme que no había puesto el código.<br />
      <br />&#160;</small></p>
</div>
<pre><span style="color: #008000">// Todo en una línea:
</span><span style="color: #0000ff">new</span> <span style="color: #2b91af">Computer</span>().AddProcessor(<span style="color: #a31515">&quot;Intel i7 920&quot;</span>).AddRAM(6).TurnOn().Test().TurnOff();</pre>
<p>&#160;</p>
<p>Por tanto, si queremos una funcionalidad como la indicada en los ejemplos de encadenamientos de métodos, tendríamos que crear un código parecido al indicado en el artículo de Gisela, es decir, crear una interfaz en los que sus métodos devuelvan la propia interfaz en lugar de un tipo más concreto.</p>
<p>&#160;</p>
<p>&#160;</p>
<h3>Fluent Interface no solo es encadenamiento de métodos</h3>
<p>Pero si hacemos caso a <a href="http://martinfowler.com/bliki/FluentInterface.html">Martin Fowler</a>, a esta forma de usar <a href="http://martinfowler.com/bliki/FluentInterface.html">Fluent Interface</a> se conoce como <a href="http://martinfowler.com/dslwip/MethodChaining.html">method chaining</a> (o encadenamientos de métodos), pero la &quot;fluidez&quot; no es sólo porque se puedan encadenar métodos&#8230; aunque yo aquí no te voy a contar lo que él ya te cuenta en su sitio, allí podrás leer más sobre <a href="http://martinfowler.com/dslwip/NestedFunction.html">nested functions</a> (anidamiento de funciones) o de <a href="http://martinfowler.com/dslwip/ObjectScoping.html">object scoping</a> (alcance -cobertura- de los objetos) que son otras de las &quot;gracias&quot; de todo esto de las interfaces fluidas (fluent interface).</p>
<p>&#160;</p>
<h3>Reflexiones</h3>
<p>En cualquier caso, todo esto está muy bien&#8230; y el que quiera usarlo que lo use y el que no, que haga como yo, que se va a dar una vuelta por la playa (o equivalente, también vale un parque o un banco en una esquina) o suda un poquillo corriendo o jugando al tenis&#8230; jejeje, que no, que es broma, es que después de un año casi sabático, tantas cosas nuevas, que no son tan nuevas, pero que ahora es cuando yo me estoy enterando de muchas de ellas, porque se usan en los lenguajes que me interesan: en general todos los incluidos en .NET Framework&#8230; la cuestión es que hay mucha información en poco tiempo y la verdad es que prefiero &quot;emplear&quot; sólo una parte de ese tiempo en cosas concretas o bien que me llamen la atención como ha sido la de este artículo de Gisela. ¡Gracias Gisela por hacer que le dedique un rato a esto de la programación en vez de estar pensando que podría estar en la playa refrescándome! (de todas formas esta tarde no tocaba playa, así que&#8230; bien empleado está el tiempo, jejeje)</p>
<p>&#160;</p>
<h3>Despedida y cierre</h3>
<p>Bueno, voy a escribir el código de ejemplo y ponerlo más arriba, que sólo he dejado el espacio para que no se me fuera la idea, que con estas calores, hasta las ideas se evaporan&#8230; jejeje</p>
<p>&#160;</p>
<p>Nos vemos.<br />
  <br />Guillermo</p>
<p>P.S.<br />
  <br />El código de ejemplo completo lo pondré en otro momento&#8230; ¿vale? pues eso&#8230; y además añadiré el correspondiente para usar esto mismo en Visual Basic .NET y si me da el punto -y se puede- también lo haré para Visual Basic 6.0</p>
<p>P.S.2 (23/Jul/2010 05.27)<br />
  <br />Ya está el código de ejemplo para que lo puedas descargar desde mi sitio: </p>
<p><strong>.NET/VB6:</strong> <a href="http://www.elguille.info/NET/dotnet/FluentInterface_codigo_vbnet_csharp_vb6.aspx">Código de ejemplo de cómo usar Fluent Interface en C#, Visual Basic .NET y Visual Basic 6.0</a> </p>
<p>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2010/07/fluent-interface-no-es-solo-simular-el-with-de-vb/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Mis libros con descuento del 75% en el día del libro</title>
		<link>http://www.elguillemola.com/index.php/2010/04/mis-libros-con-descuento-del-75-en-el-dia-del-libro/</link>
		<comments>http://www.elguillemola.com/index.php/2010/04/mis-libros-con-descuento-del-75-en-el-dia-del-libro/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 11:33:12 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[mis cosas]]></category>
		<category><![CDATA[C#Sharp]]></category>
		<category><![CDATA[elguille.info]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2010/04/mis-libros-con-descuento-del-75-en-el-dia-del-libro/</guid>
		<description><![CDATA[Pues eso&#8230; que hoy 23 de Abril es el día del libro y para que te regales uno (o dos) he conseguido que la editorial (SolidQ) haga un descuento del 75% Es decir, que si el libro vale normalmente 15 euros, y le aplicamos el 75% de descuento (11,25), resulta que el libro te cuesta [...]]]></description>
			<content:encoded><![CDATA[<div style="background-color:#ffffff; padding:1em">
<p>Pues eso&#8230; que hoy 23 de Abril es el día del libro y para que te regales uno (o dos) he conseguido que la editorial (SolidQ) haga un descuento del 75% </p>
<p>Es decir, que si el libro vale normalmente 15 euros, y le aplicamos el 75% de descuento (11,25), resulta que el libro te cuesta sólo 3,75 euros, que si le añades el 4% del IVA, resulta que por menos de 4 euros (3,9) tienes uno de estos dos libros:</p>
<h5><a href="http://www.elguille.info/NET/NovedadesVB9/Default.aspx">Novedades de Visual Basic 9.0</a></h5>
<h5><a href="http://www.elguille.info/NET/AprendaCSharp3/parte3_lo_nuevo.aspx">Aprenda C# 3.0 desde 0.0 &#8211; Parte 3, lo nuevo</a></h5>
<p>&#160;</p>
<p>Pues ya sabes&#8230; pulsa en esos enlaces y te llevará a la página descriptiva del libro y te indicará qué cupón debes usar para tener ese magnifico descuento&#8230;</p>
<p>&#160;</p>
<p>Muchas gracias.</p>
<p>&#160;</p>
<p>Nos vemos.   <br />Guillermo</p>
<p>&#160;</p>
<p>&#160;</p>
<p style="text-align:center"><b>Esta oferta finaliza a las 23.59 GMT+2 (hora de España peninsular) del domingo 25 de abril.</b></p>
<p>&#160;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2010/04/mis-libros-con-descuento-del-75-en-el-dia-del-libro/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Un foro de ayuda para convertir de VB6 a VB.NET</title>
		<link>http://www.elguillemola.com/index.php/2010/04/un-foro-de-ayuda-para-convertir-de-vb6-a-vb-net/</link>
		<comments>http://www.elguillemola.com/index.php/2010/04/un-foro-de-ayuda-para-convertir-de-vb6-a-vb-net/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 16:48:37 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[mis cosas]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[VB6]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2010/04/un-foro-de-ayuda-para-convertir-de-vb6-a-vb-net/</guid>
		<description><![CDATA[Pues eso&#8230; a raíz del comentario de Claudio sobre esto de seguir usando VB6 en vez de pasarse definitivamente a VB2005 (o cualquier otra versión de Visual Basic para .NET) y de que sería conveniente tener un sitio de &#34;debate&#34; sobre el tema, pues&#8230; he creado un foro (en mis foros) sobre este tema de [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso&#8230; a raíz del comentario de Claudio sobre esto de seguir usando VB6 en vez de pasarse definitivamente a VB2005 (o cualquier otra versión de Visual Basic para .NET) y de que sería conveniente tener un sitio de &quot;debate&quot; sobre el tema, pues&#8230; he creado un foro (en mis foros) sobre este tema de &quot;<strong>Convertir de VB6 a VB.NET</strong>&quot;, este es el link:</p>
<p><a title="http://foros.elguille.org/Mensajes.aspx?IDForo=16" href="http://foros.elguille.org/Mensajes.aspx?IDForo=16">http://foros.elguille.org/Mensajes.aspx?IDForo=16</a></p>
<p>&#160;</p>
<p>Espero que te sea de utilidad&#8230; <img src='http://www.elguillemola.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>&#160;</p>
<p>Nos vemos.   <br />Guillermo    <br />P.S.    <br />POR FAVOR no uses este comentario para hacer preguntas sobre cómo convertir código de VB6a&#160; VB.NET, para eso está ese foro, además de que allí he puesto unos cuantos enlaces de cosas que te pueden interesar sobre la conversión de VB6 a VB.NET, que encontrarás en mi sitio&#8230; incluso para funciones del API&#8230;</p>
<p>Este es el post en el que están esos enlaces:   <br /><a title="http://foros.elguille.org/Mensajes.aspx?ID=52500" href="http://foros.elguille.org/Mensajes.aspx?ID=52500">http://foros.elguille.org/Mensajes.aspx?ID=52500</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2010/04/un-foro-de-ayuda-para-convertir-de-vb6-a-vb-net/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Descuento del 20% hasta final de marzo en mis libros electr&#243;nicos</title>
		<link>http://www.elguillemola.com/index.php/2010/03/descuento-del-20-hasta-final-de-marzo-en-mis-libros-electronicos/</link>
		<comments>http://www.elguillemola.com/index.php/2010/03/descuento-del-20-hasta-final-de-marzo-en-mis-libros-electronicos/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 16:50:23 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[mis cosas]]></category>
		<category><![CDATA[C#Sharp]]></category>
		<category><![CDATA[elguille.info]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2010/03/descuento-del-20-hasta-final-de-marzo-en-mis-libros-electronicos/</guid>
		<description><![CDATA[Pues eso&#8230; que en este mes de marzo puedes comprar mis dos libros electrónicos (en formato PDF) con un 20% de descuento. El descuento es aplicable tanto para el de Novedades de Visual Basic 9.0 como para el de Aprenda C# 3.0 desde 0.0 &#8211; Parte 3, lo nuevo, aunque el cupón a usar es [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso&#8230; que en este mes de marzo puedes comprar mis dos libros electrónicos (en formato PDF) con un 20% de descuento. </p>
<p>El descuento es aplicable tanto para el de <a href="http://www.elguille.info/NET/NovedadesVB9/Default.aspx">Novedades de Visual Basic 9.0</a> como para el de <a href="http://www.elguille.info/NET/AprendaCSharp3/parte3_lo_nuevo.aspx">Aprenda C# 3.0 desde 0.0 &#8211; Parte 3, lo nuevo</a>, aunque el cupón a usar es diferente, para el libro de Visual Basic usa: <strong>elGuille20</strong> y para el de C# tienes que usar este otro: <strong>elGuilleCS20</strong>.</p>
<p>&#160;</p>
<p>Recuerda que estos libros son electrónicos, por tanto NO son en papel&#8230; si los quieres en papel&#8230; deberías imprimirlos tú mismo&#8230; pero mejor que no&#8230; que así ahorras tiempo y dinero&#8230; y los puedes leer mientras usas el ordenador (o computadora).</p>
<p>Pues eso&#8230; para que quedes avisado y no digas nada después de que no avisé&#8230; <img src='http://www.elguillemola.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>&#160;</p>
<p>Nos vemos.   <br />Guillermo    <br />P.S.    <br />Esos dos links te llevarán a la página con la descripción de los libros y en esas páginas encontrarás los links que correspondan para hacer la compra.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2010/03/descuento-del-20-hasta-final-de-marzo-en-mis-libros-electronicos/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>[webcast] Lo nuevo de Visual Basic 10</title>
		<link>http://www.elguillemola.com/index.php/2010/02/webcast-lo-nuevo-de-visual-basic-10/</link>
		<comments>http://www.elguillemola.com/index.php/2010/02/webcast-lo-nuevo-de-visual-basic-10/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 15:01:55 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[VB10]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[webcast]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2010/02/webcast-lo-nuevo-de-visual-basic-10/</guid>
		<description><![CDATA[Ya terminó&#8230; pero lo podéis ver en diferido Pues eso, que los de UOC DotNetClub me han invitado para de una charla online sobre las novedades de la próxima versión de Visual Basic, la versión 10 que se incluirá en Visual Studio 2010 y que usará .NET Framework 4.0. Este es el cartel del evento [...]]]></description>
			<content:encoded><![CDATA[<div style="background-color:#FFFFD0">
<h2 style="text-align:center">Ya terminó&#8230; pero lo podéis ver en diferido</h2>
<p><br/><br />
Pues eso, que los de UOC DotNetClub me han invitado para de una charla online sobre las novedades de la próxima versión de Visual Basic, la versión 10 que se incluirá en Visual Studio 2010 y que usará .NET Framework 4.0.</p>
<p>Este es el cartel del evento y más abajo te dejo el link (enlace) para que te registres como asistente, aunque también estará disponible de forma desconectada, pero eso será después del evento, que será el próximo martes 23 de febrero a las 20.00 (hora de la península, es decir GMT/UTC +1)</p>
<p><a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032441987&amp;Culture=es-ES" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="novedadesVB10_UOC" src="http://www.elguillemola.com/img/webcastLonuevodeVisualBasic10_DF85/novedadesVB10_UOC.png" border="0" alt="novedadesVB10_UOC" width="404" height="423" /></a><br />
Pulsa en la imagen para registrarte para este evento</p>
<p>Esta es la dirección del registro:<br />
<a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032441987&amp;Culture=es-ES">http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032441987&amp;Culture=es-ES</a></p>
<p>Y si quieres más información, puedes ir a la sección de eventos de UOC DotNetClub:<br />
<a href="http://uoc.dotnetclubs.com/eventos">http://uoc.dotnetclubs.com/eventos</a></p>
<p>¿Te apuntas? Si es así&#8230; el 23-F nos &#8220;escucharemos&#8221; (bueno, tú me escucharás a mí, jeje)</p>
<p>Nos vemos.<br />
Guillermo</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2010/02/webcast-lo-nuevo-de-visual-basic-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cap&#237;tulo 4 de las Novedades de Visual Basic 9.0 (el libro del Guille)</title>
		<link>http://www.elguillemola.com/index.php/2009/10/captulo-4-de-las-novedades-de-visual-basic-9-0-el-libro-del-guille/</link>
		<comments>http://www.elguillemola.com/index.php/2009/10/captulo-4-de-las-novedades-de-visual-basic-9-0-el-libro-del-guille/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 23:38:25 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[Visual Basic]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2009/10/captulo-4-de-las-novedades-de-visual-basic-9-0-el-libro-del-guille/</guid>
		<description><![CDATA[Ayer martes día 20 de Octubre (en realidad anteayer, que ya es día 22) tuve un webcast para el grupo de usuarios de punto Net de Lleida, el tema de esa charla era precisamente sobre las novedades de Visual Basic 2008 (o VB9) y cuando me tocó explicar los tipos anónimos, sufrí un lapsus&#8230; vamos [...]]]></description>
			<content:encoded><![CDATA[<p>Ayer martes día 20 de Octubre (en realidad anteayer, que ya es día 22) tuve un webcast para el <a href="http://lleida.dotnetclubs.com/" target="_blank">grupo de usuarios de punto Net de Lleida</a>, el tema de esa charla era precisamente sobre las novedades de Visual Basic 2008 (o VB9) y cuando me tocó explicar los tipos anónimos, sufrí un lapsus&#8230; vamos que me quedé en blanco a la hora de indicar cómo se definían propiedades de sólo lectura en los tipos anónimos (es que en VB se permite crear propiedades de lectura/escritura y de sólo lectura, algo que no es posible en C#), y para aquéllos que asististeis (y para el resto de criaturas que lean este post) me he decidido a poner a vuestra disposición, de forma íntegra y por la cara, el capítulo 4 de mi libro <a href="http://www.elguille.info/NET/NovedadesVB9/Default.aspx" target="_blank">Novedades de Visual Basic 9.0</a>.</p>
<p>Esta es la introducción de ese capítulo:</p>
<blockquote><p>En este capítulo continuamos con las novedades de Visual Basic 9.0, pero en esta ocasión solo las podremos usar con la versión 3.5 .NET Framework.<br />
Estas características (al igual que casi todas las novedades de Visual Basic 9.0) tienen su razón de ser en todo lo referente a LINQ; pero antes de ver qué es LINQ y cómo usarlo desde nuestro lengua-je favorito, veámoslas con detalle para que nos resulte más fácil comprender lo que he dejado para el final de este repaso en profundidad a las novedades de Visual Basic 9.0.<br />
Las novedades que veremos en este cuarto capítulo son:<br />
• Los tipos anónimos.<br />
• Las expresiones lambda o funciones anónimas.</p></blockquote>
<p>Como puedes comprobar, además de los tipos anónimos explico que son las expresiones lambda (o funciones anónimas), espero que te guste y te animes a <a href="http://www0.solidq.com/ib/Press.aspx" target="_blank">comprar el libro</a> que al ser en formato PDF el precio que tiene es bastante asequible&#8230; además de que suele haber algún que otro descuento (actualmente es un 10%), los cupones de descuento (si hay) los consigues desde la página del libro en mi sitio (el link que te puse arriba).</p>
<p><a href="http://www.elguille.info/NET/NovedadesVB9/SQM_Novedades_VB9_cap4.pdf" target="_blank">Capítulo 4 de Novedades de Visual Basic 9.0</a> (del Guille) (formato .pdf)</p>
<p>Y si quieres saber cuál es el contenido del libro, aquí tienes el índice en formato PDF:<br />
<a href="http://www.elguille.info/NET/NovedadesVB9/SQM_Novedades_VB9_indice.pdf" target="_blank">Índice de Novedades de Visual Basic 9.0</a>.</p>
<p>Ni que decir tiene que el contenido de estos dos PDF NO los puedes usar y/o publicar en ningún medio o forma, ni tan siquiera indicando de dónde lo has obtenido ya que están protegidos por copyright.<br />
Lo que si puedes hacer es poner un link a esta entrada del blog, por lo cual te estaré muy agradecido.<br />
Gracias.</p>
<p>Nos vemos.<br />
Guillermo</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2009/10/captulo-4-de-las-novedades-de-visual-basic-9-0-el-libro-del-guille/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Las novedades de Visual Basic 2010 y Visual C# 2010 (en ingl&#233;s)</title>
		<link>http://www.elguillemola.com/index.php/2009/10/las-novedades-de-visual-basic-2010-y-visual-c-2010-en-ingls/</link>
		<comments>http://www.elguillemola.com/index.php/2009/10/las-novedades-de-visual-basic-2010-y-visual-c-2010-en-ingls/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 15:06:16 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C# 4.x]]></category>
		<category><![CDATA[C#Sharp]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[VB10]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.elguillemola.com/index.php/2009/10/las-novedades-de-visual-basic-2010-y-visual-c-2010-en-ingls/</guid>
		<description><![CDATA[Pues eso&#8230; que he estado instalando esta mañana las versiones Express de estos dos lenguajes, que aún están en fase de Beta 2, y vi el link a las novedades de Visual Basic 2010, así que&#8230; puse el link en la página de fans del Guille en Facebook y ya que había dado con las [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso&#8230; que he estado instalando esta mañana las versiones Express de estos dos lenguajes, que aún están en fase de Beta 2, y vi el link a las novedades de Visual Basic 2010, así que&#8230; puse el link en la página de fans del Guille en Facebook y ya que había dado con las novedades de Visual Basic 2010 (<a href="http://msdn.microsoft.com/en-us/library/we86c8x2(VS.100).aspx" target="_blank">What&#8217;s new in Visual Basic 2010</a>), me dije que los que usan los puntos y comas y me visitan también tienen derecho a saber qué hay de nuevo en C#, así que&#8230; busqué la página correspondiente y esta es: Novedades de Visual C# 2010 (<a href="http://msdn.microsoft.com/en-us/library/bb383815(VS.100).aspx" target="_blank">What&#8217;s new in Visual C# 2010</a>), el problema es que están en inglés, pero te digo que es una ventaja, ya que la información de las novedades de los lenguajes de Visual Studio 2008 no estuvieron disponibles hasta que salió la versión final&#8230; así que&#8230; eso que llevas adelantado&#8230; aunque en inglés&#8230; <img src='http://www.elguillemola.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Ahora a leerlas, analizarlas e intentar entenderlas, jejeje</p>
<p>Nos vemos.<br />
Guillermo</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2009/10/las-novedades-de-visual-basic-2010-y-visual-c-2010-en-ingls/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>[webcast] Novedades de Visual Basic 2008</title>
		<link>http://www.elguillemola.com/index.php/2009/10/webcast-novedades-de-visual-basic-2008/</link>
		<comments>http://www.elguillemola.com/index.php/2009/10/webcast-novedades-de-visual-basic-2008/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 12:58:32 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[webcast]]></category>

		<guid isPermaLink="false">http://www.elguillemola.org/index.php/2009/10/webcast-novedades-de-visual-basic-2008/</guid>
		<description><![CDATA[El grupo de usuarios lleida dotNetClub ha organizado un webcast para el próximo martes 20 de Octubre de 2009 a las 19.00CEST (GMT+2 aunque en el cartel indique GMT+1 ese día aún estamos con el horario de verano en España) y esta es la info que puedes encontrar en el sitio web y que te [...]]]></description>
			<content:encoded><![CDATA[<p>El grupo de usuarios <a href="http://lleida.dotnetclubs.com/" target="_blank"><strong>lleida dotNetClub</strong></a> ha organizado un webcast para el próximo martes 20 de Octubre de 2009 a las 19.00CEST (GMT+2 aunque en el cartel indique GMT+1 ese día aún estamos con el horario de verano en España) y esta es la info que puedes encontrar en el sitio web y que te repito para que no te lo pierdas&#8230; ¡nos oímos el día 20!</p>
<p>¿Quieres saber las novedades Visual Basic en su última versión? ¡Tienes una cita que no puedes perderte! “El Guille” , uno de los MVP ( www.elguille.info , Microsoft Most Valuable Professional) más reconocidos de la comunidad y speaker de INETA nos enseñara todos los secretos de uno de los lenguajes más usados por todos. Material no nos va a faltar y calidad aún menos, nos daremos una vuelta por Visual Studio 2008 viendo todas las novedades de VB 2008! Acuérdate de apuntarte y no te lo pierdas, aprovecha la oportunidad de divertirte aprendiendo!</p>
<p><img src="http://www.elguille.info/lonuevo/2009/octubre/Charla20Oct.png" alt="" width="439" height="330" /></p>
<p><strong>Puedes registrarte aquí:<br />
</strong><a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032428029&amp;Culture=es-ES">http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032428029&amp;Culture=es-ES</a></p>
<p>Te va a llegar un email con una URL una vez te registres y con esa misma URL el día del evento (unos 10 minutos antes) ya te loguearas en Live Meeting para asistir a la charla (os instalará un exe cliente para poder asistir a la charla).</p>
<p>¡Espero que os guste a todos!  ¡Próximamente más!</p>
<p> </p>
<p><a href="http://lleida.dotnetclubs.com/webcasts/webcast-novedades-de-visual-basic-2008-con-quot-el-guille-quot/" target="_blank">Pulsa aquí para ver esta nota en el sitio de lleida dotNetCamp</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2009/10/webcast-novedades-de-visual-basic-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consultado en mi sitio: Acceder al contenido de una p&#225;gina Web</title>
		<link>http://www.elguillemola.com/index.php/2009/10/consultado-en-mi-sitio-acceder-al-contenido-de-una-pgina-web/</link>
		<comments>http://www.elguillemola.com/index.php/2009/10/consultado-en-mi-sitio-acceder-al-contenido-de-una-pgina-web/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 19:00:02 +0000</pubDate>
		<dc:creator>elGuille</dc:creator>
				<category><![CDATA[cosas técnicas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[elguille.info]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.elguillemola.org/index.php/2009/10/consultado-en-mi-sitio-acceder-al-contenido-de-una-pgina-web/</guid>
		<description><![CDATA[La batallita del agüelo Debido a que me he propuesto actualizar más a menudo este blog (mi blog) que mi sitio (elguille.info), lo que no quisiera es que la gente que visita mi sitio (por aquello de la costumbre que da todos los años que lleva funcionando o simplemente porque se lo han encontrado en [...]]]></description>
			<content:encoded><![CDATA[<h3>La batallita del agüelo</h3>
<p>Debido a que me he propuesto actualizar más a menudo este blog (mi blog) que mi sitio (elguille.info), lo que no quisiera es que la gente que visita mi sitio (por aquello de la costumbre que da todos los años que lleva funcionando o simplemente porque se lo han encontrado en Google o Bing (o como quiera que se llame el buscador de Microsoft, que ya llevan 3 nombres en menos de 5 años, así pasa lo que pasa, que la gente se lía: voy a buscar con <strong>MSN search</strong>, que no, que ahora se llama <strong>Live search</strong>, pos no estás desfasado tú, que se llama <strong>bing</strong>, pero si en la barra del <strong>Internet Explorer</strong> muestra <strong>windows live</strong>, pos que quieres que te diga, le habrán vuelto a cambiar el nombre, ya van 4 nombres en menos de 5 años y eso que sólo habré tardado en escribir este párrafo unos 2 minutos&#8230; si es que&#8230;).     <br />A lo que iba, que si alguien entra en mi sitio, quisiera que tuviera a mano los últimos posts (entradas, artículos, cosas que he escrito, decide cómo llamar a los posts) y como en todas las páginas del blog se muestra una lista con los posts más recientes (por medio de un widget en el que yo le indico cuántos quiero que se muestren, a día de hoy se muestran 7, pero puedo poner hasta un máximo de 15), así que&#8230; mirando el código de la página generada, he pensado en extraer (aquí lo más fácil hubiera sido decir &quot;coger&quot;, pero&#8230; no quiero que algunos de los que viven al otro lado del charco me hagan un chiste fácil&#8230; y es que los españoles no agarramos nada, lo cogemos todo, hasta la gripe la cogemos&#8230; en fin&#8230;).</p>
<h3>Buscar un texto en una página web</h3>
<p>Bien, sabiendo lo que quiero hacer: buscar un texto en el contenido de una página web.    <br />Lo que necesito es: un código que haga eso.     <br />Y eso está publicado en mi sitio publicado en Abril de 2008. concretamente en:</p>
<div style="background-color: #f0f0c0">
<p><b>Cómo.NET:</b> <a href="http://www.elguille.info/dotnet/system_net_acceder_pagina_web.aspx">Acceder al contenido de una página Web</a> </p>
</p></div>
<p>En particular lo que me interesa es este trozo: el mostrado en el <a href="#listado1">listado 1</a>.</p>
<p>Por supuesto, esto hay que modificarlo un poco, ya que lo voy a usar en una página Web.</p>
<p>Aunque habitualmente uso el Expression Web para editar las páginas de mi sitio (a día de hoy, estoy usando la versión 3), y con idea de no complicarme la vida (porque voy a usar código), lo que hago es abrir mi sitio web (la copia local de mi equipo) en Visual Studio 2008, de esa forma podré escribir el código de forma más sencilla que con el Expression Web, ya que el EW sabrá mucho de páginas y sitios Web, pero de Visual Basic .NET no sabe ni que existe la instrucción End.</p>
<h4>Editar mi sitio con Visual Studio 2008</h4>
<p>Abro mi sitio en el Visual Studio 2008 y modifico la página principal que es en la que quiero incluir esa lista de las cosas más recientes de este blog.    <br />Me posiciono en la parte de la página que tengo para el código y pego el procedimiento del <a href="#listado1">listado 1</a>.     <br />Por suerte, el Visual Studio 2008 detecta los fallos incluso de las páginas web como esta en la que tengo en el mismo fichero tanto la parte del código como la presentación (código HTML) y en este caso, los errores que me da es porque las clases <strong>WebRequest</strong>, <strong>WebResponse</strong> y <strong>StreamReader</strong> no están definidas, pero ya sabes que pulsando en el mismo error te da la posibilidad de arreglarlo, y en este caso es añadiendo las importaciones a los espacios de nombres <strong>System.Net</strong> y <strong>System.IO</strong>, que en código ASP.NET se hace como te muestro en el listado 2:</p>
<pre style="padding-bottom: 0.5em; background-color: #f0f0f0; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em"><span style="background-color: #ffff00">&lt;%</span><span style="color: #0000a0">@</span> <span style="color: #b22222">Import</span> <span style="color: #ff0000">Namespace</span><span style="color: #0000a0">=</span><span style="color: #0000ff">&quot;System.IO&quot;</span><span style="color: #b22222"></span> <span style="background-color: #ffff00">%&gt;</span>
<span style="background-color: #ffff00">&lt;%</span><span style="color: #0000a0">@</span> <span style="color: #b22222">Import</span> <span style="color: #ff0000">Namespace</span><span style="color: #0000a0">=</span><span style="color: #0000ff">&quot;System.Net&quot;</span><span style="color: #b22222"></span> <span style="background-color: #ffff00">%&gt;</span></pre>
<p align="center">Listado 2</p>
<h4>Convertir el Sub en Function y detectar errores</h4>
<p>Como no voy a usar la función <strong>Console</strong> y lo que me interesa es obtener una cadena de texto, convierto ese procedimiento Sub en una función y hago que devuelva la cadena leída (lo que está en la variable <strong>res</strong>). </p>
<p>Pero como se pueden producir errores, incluyo todo el código dentro de un bloque <strong>Try/Catch</strong> de forma que si se produce un error se devuelva una cadena con el error que se ha producido, si todo va bien, se devuelve la cadena con el texto leído de la página web generada por el acceso a (en este caso) el directorio raíz del blog (el IIS ya se encarga de mandar la página HTML que corresponda).</p>
<p>En el <a href="#listado3">listado 3</a> tienes esta función modificada.</p>
<h4>Llamar a la función desde otro método</h4>
<p>Esa función necesita que se le indique qué página queremos leer y después tendremos que leer el contenido y buscar la parte que nos interese, en mi caso, después de haber &quot;analizado&quot; lo que genera el blog, detecto que necesito encontrar la cadena &quot;widget widget_recent_entries&quot; y una vez hallada, debo tomar todo lo que haya a partir del encabezado (&lt;H2) que le da el título a ese bloque de links. Y como es un bloque de links, deben estar incluidos entre &lt;ul&gt; y &lt;/ul&gt;, por tanto necesito el trozo de cadena (que haya después de la cadena esa del widget) desde el siguiente &lt;h2 hasta encontrarse con &lt;/ul&gt;.</p>
<p>Y eso es lo que hace el código del <a href="#listado4">listado 4</a>.</p>
<p>En ese listado verás que se modifica el contenido de <strong>pBlogGuille</strong>, es más, lo que se hace es asignar a la propiedad <strong>InnerHtml</strong> el texto obtenido. <strong>pBlogGuille</strong> es un div que hay en la página y que, como es de esperar, contendrá los links de los artículos recientes. </p>
<p>La variable <strong>divBlogGuille</strong> es otro div que contiene al anterior y que lo hacemos invisible de forma predeterminada (en el código HTML) y para que resulte evidente, también al principio de este último procedimiento. De esa forma, si se produce un error o no se obtiene lo que se espera, no se mostrará nada, ya que se oculta todo el div, que por supuesto debe ejecutarse en el lado del servidor. Para que lo tengas claro, en el <a href="#listado5">listado 5</a> tienes ese código de la página .aspx en la que está todo este código.</p>
<h4>Llamar al método desde el evento Page_Load de la página</h4>
<p>Finalmente tenemos que saber desde dónde llamar al método mostrado en la sección anterior, y como lo que queremos es que esos links se muestren al cargar la página, hacemos una llamada en el evento <strong>Page_Load</strong> de la página (yo ya tengo ese método de evento declarado, si no, tendría que definirlo). </p>
<p>Aquí simplemente hacemos la llamada al método, es decir, incluimos esto en cualquier parte de ese método de inicio:</p>
<pre>leerUltimosBlogGuille()</pre>
<p>Y esto es todo, espero que te sea de utilidad y si tienes dudas sobre algo de lo aquí comentado, por favor haz lo siguiente:<br />
  <br />-Primero busca en Internet sobre lo que tienes la duda, lo más fácil es buscar en Google o en Bing escribiendo la frase completa de lo que quieres saber. </p>
<p>-Segundo (si buscando no encuentras lo que quieres) pregunta en los foros (ya sean los míos o los de otros, por ejemplo los de MSDN/Microsoft) </p>
<p>-Si después de preguntar no tienes la solución, tienta a la suerte y pregunta en este mismo hilo, pero procura que sea algo relacionado con lo explicado y como no me creeré que tengas dudas después de dar los dos pasos anteriores, tendrás que decirme qué has preguntado y cómo has buscado <img src='http://www.elguillemola.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  y adema´s debes estar registrado ene este blog&#8230; jejeje, que no, que no tienes que explicarme nada, y menos justificar que has hecho los deberes, pero procura buscar antes de preguntarme, porque seguramente yo sabré si has buscado o no, y si detecto que vas buscando lo fácil&#160; cómodo (que otro haga tu trabajo) pues&#8230; no te digo lo que haré o diré&#8230; ¡imagínatelo!</p>
<p>Nos vemos.<br />
  <br />Guillermo </p>
<p>P.S. </p>
<p>Para que todo esto sea posible (para las pruebas que he hecho) he tenido que buscar otra cosa en mi sitio: <a href="http://www.elguillemola.org/index.php/2009/10/consultado-en-mi-sitio-configurar-un-sitio-web-en-local-con-windows-vista/">Configurar un sitio Web en local con Windows Vista</a></p>
<hr /><a name="codigo"></p>
<h3>Código</h3>
<p></a><a name="listado1"></p>
<h5>Listado 1</h5>
<p></a></p>
<pre style="padding-bottom: 0.5em; background-color: #f0f0f0; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em"><span style="color: #008000">' Acceder a una página Web usando WebRequest y WebResponse
</span><span style="color: #0000ff">Sub</span> leerPaginaWeb(<span style="color: #0000ff">ByVal</span> laUrl <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span>)

    <span style="color: #008000">' Cear la solicitud de la URL.
</span>    <span style="color: #0000ff">Dim</span> request <span style="color: #0000ff">As</span> WebRequest = WebRequest.Create(laUrl)

    <span style="color: #008000">' Obtener la respuesta.
</span>    <span style="color: #0000ff">Dim</span> response <span style="color: #0000ff">As</span> WebResponse = request.GetResponse()

    <span style="color: #008000">' Abrir el stream de la respuesta recibida.
</span>    <span style="color: #0000ff">Dim</span> reader <span style="color: #0000ff">As</span> <span style="color: #0000ff">New</span> StreamReader(response.GetResponseStream())

    <span style="color: #008000">' Leer el contenido.
</span>    <span style="color: #0000ff">Dim</span> res <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span> = reader.ReadToEnd()

    <span style="color: #008000">' Mostrarlo.
</span>    Console.WriteLine(res)

    <span style="color: #008000">' Cerrar los streams abiertos.
</span>    reader.Close()
    response.Close()
<span style="color: #0000ff">End</span> <span style="color: #0000ff">Sub
</span></pre>
<hr /><a name="listado3"></p>
<h5>Listado 3</h5>
<p></a></p>
<pre style="padding-bottom: 0.5em; background-color: #f0f0f0; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em"><span style="color: #008000">' Acceder a una página Web usando WebRequest y WebResponse
</span><span style="color: #0000ff">Private</span> <span style="color: #0000ff">Function</span> strPaginaWeb(<span style="color: #0000ff">ByVal</span> laUrl <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span>) <span style="color: #0000ff">As</span> <span style="color: #0000ff">String
</span>    <span style="color: #0000ff">Dim</span> res <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span> = <span style="color: #a31515">&quot;&quot;
</span>
    <span style="color: #0000ff">Try
</span>        <span style="color: #008000">' Cear la solicitud de la URL.
</span>        <span style="color: #0000ff">Dim</span> request <span style="color: #0000ff">As</span> WebRequest = WebRequest.Create(laUrl)

        <span style="color: #008000">' Obtener la respuesta.
</span>        <span style="color: #0000ff">Dim</span> response <span style="color: #0000ff">As</span> WebResponse = request.GetResponse()

        <span style="color: #008000">' Abrir el stream de la respuesta recibida.
</span>        <span style="color: #0000ff">Dim</span> reader <span style="color: #0000ff">As</span> <span style="color: #0000ff">New</span> StreamReader(response.GetResponseStream())

        <span style="color: #008000">' Leer el contenido.
</span>        res = reader.ReadToEnd()

        <span style="color: #008000">' Mostrarlo.
</span>        <span style="color: #008000">'Console.WriteLine(res)

</span>        <span style="color: #008000">' Cerrar los streams abiertos.
</span>        reader.Close()
        response.Close()

    <span style="color: #0000ff">Catch</span> ex <span style="color: #0000ff">As</span> Exception
        res = <span style="color: #a31515">&quot;ERROR:&lt;br/&gt;&quot;</span> &amp; ex.Message
    <span style="color: #0000ff">End</span> <span style="color: #0000ff">Try
</span>
    <span style="color: #0000ff">Return</span> res
<span style="color: #0000ff">End</span> <span style="color: #0000ff">Function
</span></pre>
<hr /><a name="listado4"></p>
<h5>Listado 4</h5>
<p></a></p>
<pre style="padding-bottom: 0.5em; background-color: #f0f0f0; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em"><span style="color: #0000ff">Private</span> <span style="color: #0000ff">Sub</span> leerUltimosBlogGuille()
    divBlogGuille.Visible = <span style="color: #0000ff">False</span>

    <span style="color: #008000">' La URL a examinar
</span>    <span style="color: #0000ff">Dim</span> laUrl <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span> = <span style="color: #a31515">&quot;http://www.elguillemola.com/&quot;
</span>    <span style="color: #008000">' Leemos el contenido
</span>    <span style="color: #0000ff">Dim</span> res <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span> = strPaginaWeb(laUrl)
    <span style="color: #008000">' Salir si es una cadena vacía o dio error
</span>    <span style="color: #0000ff">If</span> <span style="color: #0000ff">String</span>.IsNullOrEmpty(res) <span style="color: #0000ff">Then</span> <span style="color: #0000ff">Exit</span> <span style="color: #0000ff">Sub
</span>    <span style="color: #0000ff">If</span> res.StartsWith(<span style="color: #a31515">&quot;ERROR:&quot;</span>) = <span style="color: #0000ff">True</span> <span style="color: #0000ff">Then</span> <span style="color: #0000ff">Exit</span> <span style="color: #0000ff">Sub
</span>
    <span style="color: #008000">' Buscar el texto
</span>    <span style="color: #0000ff">Dim</span> sTarget <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span> = <span style="color: #a31515">&quot;widget widget_recent_entries&quot;
</span>    <span style="color: #008000">' Si la posición es -1 es que no existe ese texto
</span>    <span style="color: #0000ff">Dim</span> i <span style="color: #0000ff">As</span> <span style="color: #0000ff">Integer</span> = res.LastIndexOf(sTarget)
    <span style="color: #0000ff">If</span> i = -1 <span style="color: #0000ff">Then</span> <span style="color: #0000ff">Exit</span> <span style="color: #0000ff">Sub
</span>
    <span style="color: #008000">' El formato de lo que quiero será:
</span>    <span style="color: #008000">'  &lt;h2 con el título&gt;&lt;ul&gt; y los &lt;li&gt; con las entradas
</span>    <span style="color: #008000">' por tanto, tomar desde el &lt;h2 hasta el siguiente &lt;/ul&gt;
</span>    <span style="color: #008000">' y recemos porque no se aniden posts en un &lt;li&gt;
</span>    <span style="color: #0000ff">Dim</span> j, k <span style="color: #0000ff">As</span> <span style="color: #0000ff">Integer
</span>    <span style="color: #008000">' La posición del &lt;h2
</span>    j = res.ToLower().IndexOf(<span style="color: #a31515">&quot;&lt;h2 &quot;</span>, i + 1)
    <span style="color: #0000ff">If</span> j = -1 <span style="color: #0000ff">Then</span> <span style="color: #0000ff">Exit</span> <span style="color: #0000ff">Sub
</span>    <span style="color: #008000">' La posición del &lt;/ul&gt;
</span>    k = res.ToLower().IndexOf(<span style="color: #a31515">&quot;&lt;/ul&gt;&quot;</span>, j + 1)
    <span style="color: #0000ff">If</span> k = -1 <span style="color: #0000ff">Then</span> <span style="color: #0000ff">Exit</span> <span style="color: #0000ff">Sub
</span>
    <span style="color: #008000">' Usar el trozo entre j y k para mostrar una lista con los posts más recientes del blog
</span>    <span style="color: #008000">' el + 5 es para los caracteres del final: &lt;/ul&gt;
</span>    <span style="color: #0000ff">Dim</span> listaPosts <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span> = res.Substring(j, k - j + 5)

    <span style="color: #008000">' Para probar si no se accede
</span>    <span style="color: #008000">'listaPosts = &quot;&quot;
</span>
    <span style="color: #0000ff">If</span> <span style="color: #0000ff">String</span>.IsNullOrEmpty(listaPosts) <span style="color: #0000ff">Then</span> <span style="color: #0000ff">Exit</span> <span style="color: #0000ff">Sub
</span>
    pBlogGuille.InnerHtml = listaPosts
    divBlogGuille.Visible = <span style="color: #0000ff">True
End</span> <span style="color: #0000ff">Sub
</span></pre>
<hr /><a name="listado5"></p>
<h5>Listado 5</h5>
<p></a></p>
<pre style="padding-bottom: 0.5em; background-color: #f0f0f0; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em"><span style="color: #0000a0">&lt;</span><span style="color: #b22222">div</span> <span style="color: #ff0000">id</span><span style="color: #0000a0">=</span><span style="color: #0000ff">&quot;divBlogGuille&quot;</span><span style="color: #ff0000"> runat</span><span style="color: #0000a0">=</span><span style="color: #0000ff">&quot;server&quot;</span><span style="color: #ff0000"> visible</span><span style="color: #0000a0">=</span><span style="color: #0000ff">&quot;false&quot;</span><span style="color: #ff0000"> class</span><span style="color: #0000a0">=</span><span style="color: #0000ff">&quot;NotaClaroMargin&quot;</span><span style="color: #0000a0">&gt;</span>
<span style="color: #0000a0">&lt;</span><span style="color: #b22222">div</span> <span style="color: #ff0000">class</span><span style="color: #0000a0">=</span><span style="color: #0000ff">&quot;tdTituloPeq&quot;</span><span style="color: #0000a0">&gt;</span><span style="color: #0000a0">&lt;</span><span style="color: #b22222">b</span><span style="color: #0000a0">&gt;</span>En el blog www.elguillemola.com<span style="color: #0000a0">&lt;</span><span style="color: #0000a0">/</span><span style="color: #b22222">b</span><span style="color: #0000a0">&gt;</span><span style="color: #0000a0">&lt;</span><span style="color: #0000a0">/</span><span style="color: #b22222">div</span><span style="color: #0000a0">&gt;</span>
<span style="color: #0000a0">&lt;</span><span style="color: #b22222">div</span> <span style="color: #ff0000">id</span><span style="color: #0000a0">=</span><span style="color: #0000ff">&quot;pBlogGuille&quot;</span><span style="color: #ff0000"> runat</span><span style="color: #0000a0">=</span><span style="color: #0000ff">&quot;server&quot;</span><span style="color: #0000a0">&gt;</span><span style="color: #0000a0">&lt;</span><span style="color: #0000a0">/</span><span style="color: #b22222">div</span><span style="color: #0000a0">&gt;</span>
<span style="color: #0000a0">&lt;</span><span style="color: #0000a0">/</span><span style="color: #b22222">div</span><span style="color: #0000a0">&gt;</span>
<span style="color: #0000a0">&lt;</span><span style="color: #0000a0">/</span><span style="color: #b22222">div</span><span style="color: #0000a0">&gt;</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.elguillemola.com/index.php/2009/10/consultado-en-mi-sitio-acceder-al-contenido-de-una-pgina-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

