<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4632731961057774524</id><updated>2012-02-16T11:29:02.065-06:00</updated><category term='c#'/><category term='.net'/><category term='winforms'/><category term='comunicación'/><category term='ado.net'/><category term='IIS'/><category term='sistemas distribuidos'/><category term='seguridad'/><category term='MDI'/><category term='Web service'/><title type='text'>[λ]Box - il y a vie!!</title><subtitle type='html'>La caja lambda&lt;br&gt;
Dispense usté</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lambdabox.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lambdabox.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alfonso Jesus Flores Alvarado</name><uri>https://profiles.google.com/105731859494742726756</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-wsBP5HYxW_8/AAAAAAAAAAI/AAAAAAAAAAA/UtIVmHIcXu0/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4632731961057774524.post-5822980031842261696</id><published>2012-01-30T10:47:00.002-06:00</published><updated>2012-02-01T15:19:15.331-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Agregar controles a formularios de forma dinámica (por código o en tiempo de ejecución) en .net con C#</title><content type='html'>El editor de Visual Studio nos permite tener un gran control granular de la interfaz que tendrá nuestra aplicación winforms en cuanto al manejo de controles se refiere, sin embargo es muy conveniente saber cómo podemos agregar nuestros propios controles al formulario en tiempo de ejecución (en forma dinámica o mediante código).&lt;br /&gt;&lt;br /&gt;Probablemente no lo consideren necesario, pero es algo realmente útil por ejemplo si quieres crear una lista de imágenes en miniatura que genera las miniaturas a partir de las imágenes que contenga un folder, en cuyo caso es muy dificil controlar la cantidad de PictureBox que tendrá tu formulario a menos que se generen dinámicamente en tiempo de ejecución.&lt;br /&gt;&lt;br /&gt;Nuestro ejemplo será precisamente ese, un formulario que genere las miniaturas de las imágenes que se encuentran en un folder determinado.&lt;br /&gt;&lt;br /&gt;Primeramente creamos nuestro proyecto de tipo "Windows Forms Application".&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MmAScUyFuPc/Tya5esDoKoI/AAAAAAAAAdI/N_oXvVylwlI/s1600/New%2BProject_2012-01-24_15-29-02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://3.bp.blogspot.com/-MmAScUyFuPc/Tya5esDoKoI/AAAAAAAAAdI/N_oXvVylwlI/s400/New%2BProject_2012-01-24_15-29-02.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span id="goog_1700553471"&gt;&lt;/span&gt;&lt;span id="goog_1700553472"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El siguiente paso es personalizar nuestro formulario. En este ejemplo se agregó:&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-mj2vGiM98UE/Tya7uhdNqBI/AAAAAAAAAdU/1EDWy_BaPBA/s1600/WindowsFormsApplication1%2B-%2BMicrosoft%2BVisual%2BC%2523%2B2010%2BExpress_2012-01-24_15-37-28.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="68" src="http://4.bp.blogspot.com/-mj2vGiM98UE/Tya7uhdNqBI/AAAAAAAAAdU/1EDWy_BaPBA/s320/WindowsFormsApplication1%2B-%2BMicrosoft%2BVisual%2BC%2523%2B2010%2BExpress_2012-01-24_15-37-28.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Controles iniciales.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;TextBox: para conocer el folder del cual se extraerán las imágenes, se le llamo txtBxFolder&lt;br /&gt;Button: para crear el cuadro de diálogo que nos permite seleccionar un folder, se le llamo txtFolder&lt;br /&gt;Button: para ejecutar la acción de obtener las imágenes, se le llamó btnObtenerImg.&lt;br /&gt;&lt;br /&gt;Para poder desplegar las imágenes necesitamos controles de tipo PictureBox y los colocaremos sobre un control del tipo FlowLayoutPanel. La razón es para evitarnos el problema de ir colocando los controles uno tras otro y que su posicionamiento cambie de acuerdo al tamaño de nuestra ventana. Se debe aclarar que generalemte los controles que agregamos dinámicamente deben de tener las propiedades del lugar donde se colocaran dichos controles.&lt;br /&gt;&lt;br /&gt;Agregamos el control del tipo FlowLayoutPanel y lo llamaremos PanelImgs, el formulario resultante queda así:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-9wL9ldvUxaI/Tya85yeQ_uI/AAAAAAAAAdg/kFqSYwg--Ko/s1600/WindowsFormsApplication1%2B-%2BMicrosoft%2BVisual%2BC%2523%2B2010%2BExpress_2012-01-24_15-47-07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-9wL9ldvUxaI/Tya85yeQ_uI/AAAAAAAAAdg/kFqSYwg--Ko/s320/WindowsFormsApplication1%2B-%2BMicrosoft%2BVisual%2BC%2523%2B2010%2BExpress_2012-01-24_15-47-07.png" width="310" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;A continuación crearemos el cuadro de diálogo que nos permitirá elegir un folder dentro de nuestro sistema de archivos, para eso debemos controlar el evento clic de nuestro botón btnSelectFolder y agregamos el siguiente código:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-bpW6u6jlRxw/TybGx45Q1GI/AAAAAAAAAds/SJnHz9h3kj8/s1600/WindowsFormsApplication1%2B-%2BMicrosoft%2BVisual%2BC%2523%2B2010%2BExpress_2012-01-24_16-11-13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-bpW6u6jlRxw/TybGx45Q1GI/AAAAAAAAAds/SJnHz9h3kj8/s1600/WindowsFormsApplication1%2B-%2BMicrosoft%2BVisual%2BC%2523%2B2010%2BExpress_2012-01-24_16-11-13.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Como parte final agregamos este código al evento clic del botón btnObtenerImg&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-L9SnLGgOzkE/TybHkCq_RGI/AAAAAAAAAd4/ZQpolzZQ5kU/s1600/WindowsFormsApplication1%2B-%2BMicrosoft%2BVisual%2BC%2523%2B2010%2BExpress_2012-01-30_10-37-47.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="160" src="http://4.bp.blogspot.com/-L9SnLGgOzkE/TybHkCq_RGI/AAAAAAAAAd4/ZQpolzZQ5kU/s400/WindowsFormsApplication1%2B-%2BMicrosoft%2BVisual%2BC%2523%2B2010%2BExpress_2012-01-30_10-37-47.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Clic en la imagen para ver tamaño original.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;La idea principal es recorrer la carpeta seleccionada es&amp;nbsp; busca de archivos que contengan la extensión .bmp, .jgp o .png y por cada archivo encontrado crear un objeto de tipo Picturebox al cual le asignaremos la imagen correspondiente, cambiamos el tamaño del pictureBox y lo agregamos a nuestro FlowLayoutPanel.&lt;br /&gt;&lt;br /&gt;Obtenemos este resultado, podemos ver que si cambiamos el tamaño de nuestra ventana, nuestro FlowLayoutPanel automáticamente reajusta la posicion de cada elemento.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-9WdHB7FJDM8/TybIhnhM8tI/AAAAAAAAAeE/Br9M8jxFCDk/s1600/Ejemplo%2Bde%2Bcontroles%2Bdin%25C3%25A1micos_2012-01-30_10-41-03.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="306" src="http://3.bp.blogspot.com/-9WdHB7FJDM8/TybIhnhM8tI/AAAAAAAAAeE/Br9M8jxFCDk/s320/Ejemplo%2Bde%2Bcontroles%2Bdin%25C3%25A1micos_2012-01-30_10-41-03.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;tamaño del formulario inicial&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ZyF0B5H-XUs/TybI5MA_eII/AAAAAAAAAeQ/uQduRHTO-bg/s1600/WindowsFormsApplication1%2B%2528Running%2529%2B-%2BMicrosoft%2BVisual%2BC%2523%2B2010%2BExpress_2012-01-30_10-41-57.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="233" src="http://4.bp.blogspot.com/-ZyF0B5H-XUs/TybI5MA_eII/AAAAAAAAAeQ/uQduRHTO-bg/s400/WindowsFormsApplication1%2B%2528Running%2529%2B-%2BMicrosoft%2BVisual%2BC%2523%2B2010%2BExpress_2012-01-30_10-41-57.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Formulario con tamaño modificado.&amp;nbsp;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Como nota final diremos que podemos agregar cualquier tipo de control a nuestro FlowLayoutPanel, no necesariamente PictureBox, lo que nos da mas versatilidad y flexibilidad.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4632731961057774524-5822980031842261696?l=lambdabox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lambdabox.blogspot.com/feeds/5822980031842261696/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://lambdabox.blogspot.com/2012/01/agregar-controles-formularios-de-forma.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/5822980031842261696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/5822980031842261696'/><link rel='alternate' type='text/html' href='http://lambdabox.blogspot.com/2012/01/agregar-controles-formularios-de-forma.html' title='Agregar controles a formularios de forma dinámica (por código o en tiempo de ejecución) en .net con C#'/><author><name>Alfonso Jesus Flores Alvarado</name><uri>https://profiles.google.com/105731859494742726756</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-wsBP5HYxW_8/AAAAAAAAAAI/AAAAAAAAAAA/UtIVmHIcXu0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-MmAScUyFuPc/Tya5esDoKoI/AAAAAAAAAdI/N_oXvVylwlI/s72-c/New%2BProject_2012-01-24_15-29-02.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4632731961057774524.post-5367429745502470953</id><published>2012-01-17T11:22:00.000-06:00</published><updated>2012-01-17T11:23:42.563-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MDI'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Manejo de Formularios MDI con C# y Visual Studio 2010 Express</title><content type='html'>Antes de iniciar debemos aclarar que existen dos tipos de Formularios:&lt;br /&gt;SDI (Single Document Interface)&lt;br /&gt;MDI (Multiple Document Interface)&lt;br /&gt;&lt;br /&gt;Los Formularios MDI son aquellos que permiten contener otros formularios dentro de ellos. &lt;br /&gt;&lt;br /&gt;Para crear una aplicación de tipo MDI primeramente tenemos que crear nuestro proyecto (Aplicación de Windows).&lt;br /&gt;En el formulario principal debemos establecer la propiedad &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;IsMdiContainer &lt;/span&gt;a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;True&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-qoJa7Sw7zjE/TxWhfa6f7QI/AAAAAAAAAbg/WTGnDuwu1y0/s1600/1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="172" src="http://1.bp.blogspot.com/-qoJa7Sw7zjE/TxWhfa6f7QI/AAAAAAAAAbg/WTGnDuwu1y0/s320/1.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Formulario Principal&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Posteriormente debemos Crear el formulario base que será la plantilla que tendrán nuestros formularios child. En nuestro caso hemos tratado de simular un editor de texto bastante simple pero con soporte MDI.&lt;br /&gt;&lt;br /&gt;Agregamos un nuevo formulario a nuestro proyecto.&lt;br /&gt;&lt;br /&gt;Agregamos un primer panel en la parte inferior que podrá contener botones si así lo deseamos, para hacer eso establecemos la propiedad &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Dock &lt;/span&gt;del panel en &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Bottom&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-9cMIFDKq2j4/TxWjjxcTCpI/AAAAAAAAAbo/qL8VawZqC90/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="65" src="http://4.bp.blogspot.com/-9cMIFDKq2j4/TxWjjxcTCpI/AAAAAAAAAbo/qL8VawZqC90/s400/2.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Después agregamos un segundo panel que contendrá nuestro cuadro de texto y establecemos la propiedad &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Dock &lt;/span&gt;en &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Fill&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-qTYMtklzA7s/TxWkfsP7bkI/AAAAAAAAAbw/7tdLeBKFi4Q/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="167" src="http://4.bp.blogspot.com/-qTYMtklzA7s/TxWkfsP7bkI/AAAAAAAAAbw/7tdLeBKFi4Q/s320/3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Agregamos nuestro textbox y lo renombramos a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;txtBoxContent &lt;/span&gt;y establecemos su propiedad &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Dock&lt;/span&gt; en &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Fill&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-aqwZKP5spWg/TxWlTGld24I/AAAAAAAAAcA/stOUSJZ-4iM/s1600/4_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="36" src="http://2.bp.blogspot.com/-aqwZKP5spWg/TxWlTGld24I/AAAAAAAAAcA/stOUSJZ-4iM/s400/4_1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-KQCVTEFaXds/TxWlUDSJ51I/AAAAAAAAAcE/gWAezP_QQ-s/s1600/4_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="138" src="http://2.bp.blogspot.com/-KQCVTEFaXds/TxWlUDSJ51I/AAAAAAAAAcE/gWAezP_QQ-s/s320/4_2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-zDCwtakzHfY/TxWlSllBRwI/AAAAAAAAAb4/SuGyeZHyUHU/s1600/4_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="168" src="http://3.bp.blogspot.com/-zDCwtakzHfY/TxWlSllBRwI/AAAAAAAAAb4/SuGyeZHyUHU/s320/4_3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Agregamos un botón al panel de la parte inferior que sera la simulación de un botón que servirá para guardar nuestro documento. Con esto tendremos nuestro formulario base.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-tAg7-3f5SdI/TxWn4cw0JVI/AAAAAAAAAcQ/rwjIFVBmaFA/s1600/5.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="273" src="http://2.bp.blogspot.com/-tAg7-3f5SdI/TxWn4cw0JVI/AAAAAAAAAcQ/rwjIFVBmaFA/s320/5.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Formulario Base&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Ahora crearemos un menú para tener una administración muy sencilla de las ventanas child (en el formulario Principal). Observemos que la opción "Lista -&amp;gt;"&amp;nbsp; no tiene subelementos ya que los crearemos en tiempo de ejecución&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Kh3Ic3kCVNU/TxWoTPRDQxI/AAAAAAAAAcY/Pklm0HFaDQ8/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="157" src="http://2.bp.blogspot.com/-Kh3Ic3kCVNU/TxWoTPRDQxI/AAAAAAAAAcY/Pklm0HFaDQ8/s320/6.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;.&lt;br /&gt;&lt;br /&gt;Para crear ventanas nuevas manejaremos el evento clic del menú Nueva Ventana.&lt;br /&gt;Debemos crear un nuevo objeto de nuestro formulario base (en nuestro caso &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FrmChildBase&lt;/span&gt;) y establecer su propiedad &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;MdiParent&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-IDvH7Bar8o8/TxWoosiMIjI/AAAAAAAAAcg/mwxRIjcX-r0/s1600/7.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-IDvH7Bar8o8/TxWoosiMIjI/AAAAAAAAAcg/mwxRIjcX-r0/s1600/7.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Código para agregar nuevos formularios Child&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Para ordenar nuestras ventanas debemos de manejar el evento clic de nuestro Menú Horizontal, Vertical y Cascada. Para cambiar el ordenamiento de las ventanas existe la función &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;LayoutMdi()&lt;/span&gt; que acepta una enumeración &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;MdiLayout&lt;/span&gt;. Aquí el ejemplo de las 3 opciones:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-tMbnhEgGZu8/TxWr8fC4LdI/AAAAAAAAAco/bc_0PC6arK4/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-tMbnhEgGZu8/TxWr8fC4LdI/AAAAAAAAAco/bc_0PC6arK4/s1600/8.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Una gran utilidad es el saber que ventana se encuentra activa, para eso existe la propiedad &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ActiveMdiChild&lt;/span&gt; que nos devuelve el formulario que se encuentra activo. En nuestro ejemplo manejaremos el evento clic del menú Ventana Activa y tendremos este código:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-v9flH9uleq4/TxWsJSI_iSI/AAAAAAAAAcw/V351s5O62Kw/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-v9flH9uleq4/TxWsJSI_iSI/AAAAAAAAAcw/V351s5O62Kw/s1600/9.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;También podemos tener referencia al control activo con la propiedad &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ActiveControl &lt;/span&gt;de nuestro formulario activo.&lt;br /&gt;&lt;br /&gt;Por ultimo para poder listar los formularios child que se encuentran activos manejaremos el evento &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;MouseEnter &lt;/span&gt;de nuestro menú Lista. Esto hará que cada vez que pase el mouse sobre el menú Lista se obtenga una referencia de todos los formularios child y se agreguen de forma dinámica al menú. Esto gracias a la propiedad &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;MdiChildren &lt;/span&gt;de nuestro formulario principal. La propiedad &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;MdiChildren &lt;/span&gt;nos devuelve un arreglo de formularios.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-uy_ykBpLMp8/TxWsbYslzbI/AAAAAAAAAc4/1UHTegT3s5k/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-uy_ykBpLMp8/TxWsbYslzbI/AAAAAAAAAc4/1UHTegT3s5k/s1600/10.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4632731961057774524-5367429745502470953?l=lambdabox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lambdabox.blogspot.com/feeds/5367429745502470953/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://lambdabox.blogspot.com/2012/01/manejo-de-formularios-mdi-con-c-y.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/5367429745502470953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/5367429745502470953'/><link rel='alternate' type='text/html' href='http://lambdabox.blogspot.com/2012/01/manejo-de-formularios-mdi-con-c-y.html' title='Manejo de Formularios MDI con C# y Visual Studio 2010 Express'/><author><name>Alfonso Jesus Flores Alvarado</name><uri>https://profiles.google.com/105731859494742726756</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-wsBP5HYxW_8/AAAAAAAAAAI/AAAAAAAAAAA/UtIVmHIcXu0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-qoJa7Sw7zjE/TxWhfa6f7QI/AAAAAAAAAbg/WTGnDuwu1y0/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4632731961057774524.post-4606119590474625679</id><published>2011-11-09T11:25:00.000-06:00</published><updated>2011-11-09T11:25:26.026-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web service'/><category scheme='http://www.blogger.com/atom/ns#' term='ado.net'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='sistemas distribuidos'/><category scheme='http://www.blogger.com/atom/ns#' term='comunicación'/><title type='text'>Modelo de datos desconectado - ADO.NET</title><content type='html'>&lt;a href="http://blog.websitepulse.com/wp-content/uploads/2011/05/database_2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://blog.websitepulse.com/wp-content/uploads/2011/05/database_2.png" /&gt;&lt;/a&gt;Dentro de la arquitectura de ADO.NET existe una muy buena característica que se ajusta especialmente a ambientes de tipo WEB: Modelo de datos desconectado.&lt;br /&gt;&lt;br /&gt;En esta entrada hablaremos de una forma muy superficial este tema, lo suficiente para entenderlo y saber qué es.&lt;br /&gt;&lt;br /&gt;Primeramente estableceremos que en el modelo de datos desconectado, a diferencia del modelo tradicional, se solicita una copia de los datos a manipular a la fuente de datos central; posteriormente, estando offline modificamos los datos y nos reconectamos a la fuente de datos para reflejar los cambios que hicimos offline. Los cambios únicamente son reflejados si todas las restricciones se cumplen (homogeneidad, concurrencia, etc).&lt;br /&gt;&lt;br /&gt;Una de las ventajas de este modelo es que no necesitamos una conección constante a nuestra fuente de datos, lo que libera los recursos de la fuente de datos central y hace posible que se atienda un mayor número de peticiones para datos compartidos.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;ADO.NET utiliza cachés de datos que almacena en memoria, lo cual elimina la necesidad de hacer locks a las bases de datos para proteger la integridad de los datos. Otra ventaja es que facilita el intercambio de la información entre capas (en caso de tener una arquitectura orientada a capas).&lt;br /&gt;&lt;br /&gt;Los tipos de datos utilizados en las aplicaciones ADO.NET son fuertemente tipados, lo que elimina la sobrecarga de procesamiento en conversiones de tipos de datos y facilita el entendimiento del código.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4632731961057774524-4606119590474625679?l=lambdabox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lambdabox.blogspot.com/feeds/4606119590474625679/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://lambdabox.blogspot.com/2011/11/modelo-de-datos-desconectado-adonet.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/4606119590474625679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/4606119590474625679'/><link rel='alternate' type='text/html' href='http://lambdabox.blogspot.com/2011/11/modelo-de-datos-desconectado-adonet.html' title='Modelo de datos desconectado - ADO.NET'/><author><name>Alfonso Jesus Flores Alvarado</name><uri>https://profiles.google.com/105731859494742726756</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-wsBP5HYxW_8/AAAAAAAAAAI/AAAAAAAAAAA/UtIVmHIcXu0/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>Guadalajara, JAL, México</georss:featurename><georss:point>20.67359 -103.343803</georss:point><georss:box>20.614165500000002 -103.422767 20.7330145 -103.264839</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4632731961057774524.post-2691393375145278260</id><published>2011-10-11T10:18:00.001-05:00</published><updated>2011-10-11T10:29:05.232-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>SecureString - Almacenar contraseñas en memoria de forma segura.</title><content type='html'>En mi caso y espero que no sea su caso (por lo de la contraseña), al desarrollar las aplicaciones que se conectarán a una base de datos me gusta tener una clase que me administre la conexión a la Base de Datos y todos los campos que ésta necesita (incluyendo la contraseña&amp;nbsp;de acceso).&amp;nbsp; Para evitar almacenar la contraseña en memoria en un tipo string podemos utilizar SecureString [System.Security.SecureString].&lt;br /&gt;&lt;br /&gt;Uno de los puntos importantes es que SecureString implementa CriticalFinalizerObject, lo cual significa que SecureString se considera una Región de ejecución restringida (Constrained Ejecution Region - CER)&amp;nbsp;lo que significa que las excepciones de tipo out-of-band estan prohibidas en regiones de tipo CER por lo que evitamos que cierta parte del código no se ejecute (con el fin de liberar de memoria el objeto SecureString llamando la función Dispose()). Se debe tener en cuenta que SecureString se mantiene en una región no administrada de la memoria, por lo que es nuestra responsabilidad liberar ese recurso.&lt;br /&gt;&lt;br /&gt;Nota: Considera que no tiene caso almacenar una contraseña o cualquier dato sensible en un&amp;nbsp; string y pasarlo como parámetro para agregarlo a un objeto SecureString si no eliminamos de memoria ese string inmediatamente despues de utilizarlo.&lt;br /&gt;&lt;br /&gt;Utilizar SecureString.&lt;br /&gt;&lt;br /&gt;una de las formas en que podemos utilizar SecureString en combinación con las propiedades (get &amp;amp; set):&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-U5a0ldENoU0/TpRa96iHzrI/AAAAAAAAAa8/lm7ZKKXxUIU/s1600/1.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-U5a0ldENoU0/TpRa96iHzrI/AAAAAAAAAa8/lm7ZKKXxUIU/s400/1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;En mi caso marqué la propiedad get como privada para accesar únicamente desde la misma clase.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&amp;nbsp;Es importante volver a decir que no debemos almacenar permanentemente una copia de la contraseña en memoria.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4632731961057774524-2691393375145278260?l=lambdabox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lambdabox.blogspot.com/feeds/2691393375145278260/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://lambdabox.blogspot.com/2011/10/securestring-almacenar-contrasenas-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/2691393375145278260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/2691393375145278260'/><link rel='alternate' type='text/html' href='http://lambdabox.blogspot.com/2011/10/securestring-almacenar-contrasenas-en.html' title='SecureString - Almacenar contraseñas en memoria de forma segura.'/><author><name>Alfonso Jesus Flores Alvarado</name><uri>https://profiles.google.com/105731859494742726756</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-wsBP5HYxW_8/AAAAAAAAAAI/AAAAAAAAAAA/UtIVmHIcXu0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-U5a0ldENoU0/TpRa96iHzrI/AAAAAAAAAa8/lm7ZKKXxUIU/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4632731961057774524.post-2550519297622533062</id><published>2011-09-27T16:57:00.000-05:00</published><updated>2011-10-11T10:22:04.920-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web service'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Crear un Web Service básico con C# y Visual Studio Web Developer 2010 (Express)</title><content type='html'>Teniendo Visual Studio Web Developer 2010 (lo puedes descargar gratis de la página oficial de Microsoft) podemos desarrollar nuestros propios Web Services de una forma muy sencilla.&lt;br /&gt;&lt;br /&gt;En el ejemplo mostrado corremos nuestro Web Service bajo nuestro propio servidor IIS en XP.&lt;br /&gt;&lt;br /&gt;Si no tienes noción sobre los Web Services te recomiendo &lt;a href="http://lambdabox.blogspot.com/2011/09/que-es-un-web-service-introduccion.html"&gt;una ligera lectura&lt;/a&gt; con la que tendrás una mejor idea de lo que se trata.&lt;br /&gt;&lt;br /&gt;Primeramente crearemos un nuevo sitio web, damos clic en el boton "Browse..." &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-HDeusZ94530/ToIG6FkV86I/AAAAAAAAAaU/XJdGuxDq2Rg/s1600/1.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="167" src="http://3.bp.blogspot.com/-HDeusZ94530/ToIG6FkV86I/AAAAAAAAAaU/XJdGuxDq2Rg/s320/1.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Posteriormente seleccionamos "Local IIS", "Default Web Site", "Create new Web Application", le asignamos un nombre y damos clic en "Open".&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-iUSa-OlG0z0/ToInBB5t3nI/AAAAAAAAAaY/fh3wFjceDaE/s1600/2.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="172" src="http://1.bp.blogspot.com/-iUSa-OlG0z0/ToInBB5t3nI/AAAAAAAAAaY/fh3wFjceDaE/s200/2.JPG" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Damos clic en el botón "OK" de la ventana New Web Site.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Creando el Web Service.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-nU-2-fNTsyA/ToIpVJgsF-I/AAAAAAAAAac/YCdLppArg3M/s1600/3.JPG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="365" src="http://1.bp.blogspot.com/-nU-2-fNTsyA/ToIpVJgsF-I/AAAAAAAAAac/YCdLppArg3M/s400/3.JPG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;En nuestro Explorador de soluciones damos clic con el botón derecho en el Web Site y seleccionamos "Add New Item..."&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-qPNLiHoXf2Y/ToJNAfNy7GI/AAAAAAAAAag/X-BwvUh7x-E/s1600/4.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="276" src="http://3.bp.blogspot.com/-qPNLiHoXf2Y/ToJNAfNy7GI/AAAAAAAAAag/X-BwvUh7x-E/s400/4.JPG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Posteriormente seleccionamos el código con el que trabajaremos (C# en este caso) y seleccionamos "Web Service" de la lista de elementos (no olvidemos el nombre) y damos clic en "Add"&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Después de haber realizado estos sencillos pasos, tendremos un Web Service que podremos modificar de acuerdo a nuestras necesidades.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-qgxCyHkDqDI/ToMtG3tQJEI/AAAAAAAAAak/TBQv-p55wTI/s1600/4.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-qgxCyHkDqDI/ToMtG3tQJEI/AAAAAAAAAak/TBQv-p55wTI/s1600/4.JPG" /&gt;&lt;/a&gt; Si observamos la estructura básica del código observaremos que una de las funciones generadas por el IDE contiene el atributo [WebMethod]. Este atributo es indispensable si queremos indicar que el método será expuesto como Web Service y permite que los clientes puedan llamar a dicho método de forma remota. También es necesario declararlo como un método público para que pueda ser expuesto.&lt;br /&gt;&lt;br /&gt;Para este ejemplo crearemos una nueva función que reciba un string y devuelva en una arreglo de string con las palabras que recibió como entrada. Para dividir el string original se tomarán en cuenta los espacios en blanco. El código lo podemos observar de esta forma:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-k7X319w7jrU/ToM1OVAESDI/AAAAAAAAAao/yXx0rmOVJHI/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="74" src="http://1.bp.blogspot.com/-k7X319w7jrU/ToM1OVAESDI/AAAAAAAAAao/yXx0rmOVJHI/s320/5.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Para poder verificar que nuestro Web Service funciona de la forma en que esperamos, el entorno de desarrollo de Visual Studio y el servidor IIS nos proporcionan un método de verificar nuestros Web Services a través de un cliente Web. Ya que los Web Services por sí mismos no exponen una interfaz gráfica, lo que veremos no es el Web Service en sí, es sólo un cliente web (una página) que consume un Web Service y nos muestra una interfaz con la que podemos comunicarnos con nuestro Web Service.&lt;br /&gt;&lt;br /&gt;Para iniciar con la prueba, que el IDE haga un "Build" de nuestro proyecto y podamos realizar el "debug" tenemos que presionar la tecla F5, la primera vez aparecerá un mensaje, tenememos que elegir "modificar el archivo de configuración para permitir el debug".&lt;br /&gt;&lt;br /&gt;Estas son las imagenes que veremos:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-eeZPgeeQm50/ToNDW_V_w5I/AAAAAAAAAaw/5UyBSTT3cWM/s1600/6.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="331" src="http://4.bp.blogspot.com/-eeZPgeeQm50/ToNDW_V_w5I/AAAAAAAAAaw/5UyBSTT3cWM/s400/6.JPG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Inicialmente podremos observar una página web que nos muestra una lista de las funciones remotas que podemos invocar desde la página. En este caso aparece nuestra funcion "RomperCadena", damos clic en RomperCadena.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-rAzOSp9vx7E/ToNIV1cTPPI/AAAAAAAAAa0/QOsVBo7wr-w/s1600/7.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="221" src="http://2.bp.blogspot.com/-rAzOSp9vx7E/ToNIV1cTPPI/AAAAAAAAAa0/QOsVBo7wr-w/s400/7.JPG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Aquí podemos observar que podemos asignar un valor a nuestro parámetro "cadenaOriginal", en este caso el texto con el que haremos la prueba es "Alfonso Jesus Flores A. -&amp;gt; Prueba de ejecución". Damos clic en el botón "Invoke" y obtendremos una respuesta por parte de nuestro web service.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-_DpAfBJ9TzY/ToNJDrdRxEI/AAAAAAAAAa4/HSDyAW3q0kU/s1600/8.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-_DpAfBJ9TzY/ToNJDrdRxEI/AAAAAAAAAa4/HSDyAW3q0kU/s1600/8.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Aquí tenemos el mensaje XML que obtuvimos como respuesta por parte del Web Service al darle un valor de entrada de "Alfonso Jesus Flores A. -&amp;gt; Prueba de ejecución". Podemos ver que tenemos un tag "ArrayOfString" el cual contiene strings con cada una de las palabras, tomando como referencia los espacios en blanco.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Con esto finalizamos el ejemplo básico de creación de un Web Service, a través de Web Services se pueden transmitir incluso objetos serializados a través de mensajes XML.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4632731961057774524-2550519297622533062?l=lambdabox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lambdabox.blogspot.com/feeds/2550519297622533062/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://lambdabox.blogspot.com/2011/09/crear-un-web-service-basico-con-c-y.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/2550519297622533062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/2550519297622533062'/><link rel='alternate' type='text/html' href='http://lambdabox.blogspot.com/2011/09/crear-un-web-service-basico-con-c-y.html' title='Crear un Web Service básico con C# y Visual Studio Web Developer 2010 (Express)'/><author><name>Alfonso Jesus Flores Alvarado</name><uri>https://profiles.google.com/105731859494742726756</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-wsBP5HYxW_8/AAAAAAAAAAI/AAAAAAAAAAA/UtIVmHIcXu0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-HDeusZ94530/ToIG6FkV86I/AAAAAAAAAaU/XJdGuxDq2Rg/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4632731961057774524.post-645036555706990150</id><published>2011-09-26T18:40:00.000-05:00</published><updated>2011-10-11T10:21:13.704-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web service'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='sistemas distribuidos'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='comunicación'/><title type='text'>¿Qué es un Web Service? - Introducción</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/-oGsgITj6lFo/ToHq2AhWywI/AAAAAAAAAaM/FO_5J_rNpGM/s1600/cloud-computing.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="147" src="http://2.bp.blogspot.com/-oGsgITj6lFo/ToHq2AhWywI/AAAAAAAAAaM/FO_5J_rNpGM/s200/cloud-computing.png" width="200" /&gt;&lt;/a&gt;Probablemente ya habrás escuchado hablar sobre los Servicios Web [Web Services], aquí intentaremos explicar brevemente y de una forma muy sencilla qué son esos Web Services. &lt;br /&gt;&lt;br /&gt;Iniciaremos diciendo que los Web Services nos permiten la interoperabilidad entre dos dispositivos sobre una red mediante un esquema Cliente-Servidor.&lt;br /&gt;&lt;br /&gt;Debido a que la comunicación es&amp;nbsp; con estándares XML los Web Services no dependen de ninguna plataforma, Sistema Operativo o Lenguaje de Programación; por lo que yo pudiera tener un cliente desarrollado en .net y corriendo bajo Windows XP y consumir un Web Service desarrollado en Java y corriendo bajo Linux, es por esa razón que los Web Services se utilizan ampliamente en el uso de "Sistemas Distribuidos".&lt;br /&gt;&lt;br /&gt;La mayoría de los Web Services utiliza HTTP y HTPPS para poder transmitir mensajes (tanto de solicitud como de respuesta).&lt;br /&gt;&lt;br /&gt;Actualmente las grandes empresas utilizan Web Services para poder establecer comunicación en un esquema Cliente-Servidor que permita la transmisión de objetos mediante la serialización XML, esto significa que transforman el Objeto en memoria a una versión XML que puede ser transmitido a través de HTTP y al recibir el mensaje XML se puede volver a instanciar un objeto con las características originales que se describieron en el mensaje XML.&lt;br /&gt;&lt;br /&gt;SOAP es el protocolo base que define la forma en que&amp;nbsp;se transmitirán los mensajes; está basado en XML. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4632731961057774524-645036555706990150?l=lambdabox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lambdabox.blogspot.com/feeds/645036555706990150/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://lambdabox.blogspot.com/2011/09/que-es-un-web-service-introduccion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/645036555706990150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/645036555706990150'/><link rel='alternate' type='text/html' href='http://lambdabox.blogspot.com/2011/09/que-es-un-web-service-introduccion.html' title='¿Qué es un Web Service? - Introducción'/><author><name>Alfonso Jesus Flores Alvarado</name><uri>https://profiles.google.com/105731859494742726756</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-wsBP5HYxW_8/AAAAAAAAAAI/AAAAAAAAAAA/UtIVmHIcXu0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-oGsgITj6lFo/ToHq2AhWywI/AAAAAAAAAaM/FO_5J_rNpGM/s72-c/cloud-computing.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4632731961057774524.post-1320467160467069445</id><published>2011-09-23T11:19:00.000-05:00</published><updated>2011-09-27T10:44:08.256-05:00</updated><title type='text'>Il iy a vie!!</title><content type='html'>Lo dicho, hay vida; al menos en este blog.&lt;br /&gt;&lt;br /&gt;That's all.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-snd_9xFFA3c/ToHvQjHczfI/AAAAAAAAAaQ/frJc8j0MWvs/s1600/portee.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-snd_9xFFA3c/ToHvQjHczfI/AAAAAAAAAaQ/frJc8j0MWvs/s1600/portee.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4632731961057774524-1320467160467069445?l=lambdabox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lambdabox.blogspot.com/feeds/1320467160467069445/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://lambdabox.blogspot.com/2011/09/il-iy-vie.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/1320467160467069445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4632731961057774524/posts/default/1320467160467069445'/><link rel='alternate' type='text/html' href='http://lambdabox.blogspot.com/2011/09/il-iy-vie.html' title='Il iy a vie!!'/><author><name>Alfonso Jesus Flores Alvarado</name><uri>https://profiles.google.com/105731859494742726756</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-wsBP5HYxW_8/AAAAAAAAAAI/AAAAAAAAAAA/UtIVmHIcXu0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-snd_9xFFA3c/ToHvQjHczfI/AAAAAAAAAaQ/frJc8j0MWvs/s72-c/portee.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
