sábado, 12 de octubre de 2013

¿Cómo crear un popup que ocupe la pantalla completa en windows phone?

La semana pasada me vi en la necesidad de crear un popup que ocupara la pantalla completa del dispositivo pensé que sería algo difícil implementarlo pero en realidad es muy fácil ya que contamos con las propiedades Application.Current.Host.Content.ActualHeight y Application.Current.Host.Content.ActualWidth que son aquellas que nos retornan el ancho y alto de la pantalla del dispositivo. Aqui dejo un code snippet para que vean como se puede implementar.
public void showPopUp()
    {
        //obtenemos el ancho y  el alto 
       double height=Application.Current.Host.Content.ActualHeight;
       double width = Application.Current.Host.Content.ActualWidth;
      //stackpanel 
       StackPanel stk = new StackPanel();
      //establecemos el tamaño del height al stackpanel
       stk.Height = height;
      //establecemos el tamaño del witdh al stackpanel
       stk.Width = width;  
       //color de fondo
       stk.Background = new SolidColorBrush(Colors.Red); 
       //textblock
       TextBlock txtblock = new TextBlock() { FontSize=40, Text="HELLO WORLD", TextWrapping=TextWrapping.Wrap};
       //agregamos el textblock al stackpanel
       stk.Children.Add(txtblock);
       Popup _popup = new Popup();
       //child content el stackpanel
       _popup.Child = stk; 
       this.LayoutRoot.Children.Add(_popup); 
       //mostramos el popup
       _popup.IsOpen = true;

    }
Este es el resultado que se obtiene :D.

domingo, 6 de octubre de 2013

CREANDO TU PROPIO REMINDER RATE

¿Quién de los desarrolladores de WP no conoce el famoso control de telerik llamado Reminder Rate?

Bueno por si no lo conoces es  un  popup que  te da como sugerencia calificar  la aplicación. Lamentablemente yo no cuento con la licencia para usar los controles de telerik :(  es por esto que decidí hacer mi propio
"Reminder Rate".

Les puedo decir que los resultados son satisfactorios pues tan solo a un  día de actualizar mi app e integrar el Reminder he obtenido más de 10 ratings aquí unas capturas de pantalla :p.




¿Cómo hago  mi propio Reminder Rate ?



La verdad es muy sencillo  lo único que tienes que hacer es seguir los siguientes pasos.

 Abre el  Manage Nuget Packages  e instala la nuget de coding4fun para windows phone tal y como se muestra en la siguiente imagen.

















En tu proyecto agrega una clase  en este caso yo la llame Reminder  pero tú la puedes llamar como  tu quieras .Esta clase usa el control "MessagePrompt" de la librería coding4fun este control es es un popup que nos deja agregar multiples controles como contenido del mismo. Dentro de la clase también usamos la propiedad IsolatedStoreSettings que es básicamente la que nos permite guardar las veces que el usuario ha visitado la app y también el limite cuando queremos que se muestre el mensaje al usuario.
 Creo que esto es lo más importante de la clase y trate de comentar cada linea de código para que sea  lo puedan entender más fácilmente,
[C#]
using System;
using System.IO.IsolatedStorage;
using System.Windows;
using System.Windows.Controls;
using Coding4Fun.Toolkit.Controls;
using Microsoft.Devices;
namespace example
{
    public class Reminder
    {


        private IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;

        //Constantes  que serán el nombre de  nuestras 'Keys' en IsolatedStorageSettings
        private const String UserCount = "UserCount"; //Key que servirá para saber hasta que vez queremos que se muestre el mensaje
        private const String CurrentCount = "CurrentCount"; //Key para almacenar las veces que ha entrado el usuario a la app
        private const String NeverShow = "NeverShow"; //Key boolena para saber si el usuario ha elegido si no se quiere mostrar el mensaje

        //variables que nos servira  para obtener  hasta que ves queremos que se muestre el mensaje
        private int _RecurrenUserCount;

        public int RecurrenceUserCount
        {
            get
            {
                //retornamos el  el valor de la variable privada
                return this._RecurrenUserCount;
            }

            set
            {
                this._RecurrenUserCount = value;
                //Notificamos el cambio  y  lo guardamos en la variable del isolated
                this.valuesChanged(this.RecurrenceUserCount, UserCount);

            }
        }

        //variables para almacenar los strings que se mostrarán en el mensaje
        public String titulo { get; set; } //titulo
        public String content { get; set; }//contenido del mensaje
        public String checkboxContent { get; set; } //contenido del checkbox


        /// 
        /// Contructor de la clase
        /// 
        public Reminder()
        {
            //revisamos si esta registrada la key en el isolated 
            /*
             NeverShow  es la variable booleana que nos dirá si se seguirá mostrando el mensaje.
             */
            if (!this.settings.Contains(NeverShow))
                this.settings.Add(NeverShow, false);

            //revisamos si existe la key CurrentCount que es la que nos dice cuantas veces ha entrado el usuario a la app
            if (!this.settings.Contains(CurrentCount))
                this.settings.Add(CurrentCount, 0);

            //guardamos los datos cambiados en el isolated
            this.settings.Save();
        }

        /// 
        /// Método para  capturar los cambios de nuestras keys en isolated
        /// 
        /// 
        /// 
        private void valuesChanged(object value, string key)
        {

            if (this.settings.Contains(key))
                this.settings[key] = value;
            else
                this.settings.Add(key, value);

            this.settings.Save();
        }

        /// 
        /// Método para mostrar el mensaje
        /// 
        public void show()
        {

            //con este if revisamos si  las keys del isolated coinciden y también revisamos que la key NeverShow este en false
            if ((int)this.settings[UserCount] == (int)this.settings[CurrentCount] && (bool)this.settings[NeverShow] == false)
            {

                //child content del mensaje
                StackPanel stk = new StackPanel();

                TextBlock txt = new TextBlock();
                txt.TextWrapping = TextWrapping.Wrap;
                txt.Text = this.content; //set content 

                CheckBox checkbx = new CheckBox();
                checkbx.Content = this.checkboxContent; //set checkboxContent
                checkbx.FontSize = 16;

                //agregamos el checkbox y textblock al stackpanel
                stk.Children.Add(txt);
                stk.Children.Add(checkbx);

                //declaramos e instanciamos el MessagePrompt  que forma parte de coding4fun
                MessagePrompt msg = new MessagePrompt();
                // set titulo del mensaje
                msg.Title = this.titulo;
                msg.Body = stk; //ponemos como body el stackpanel que declaramos
                //mostramos el boton cancelar
                msg.IsCancelVisible = true;

                //evento para capturar la respuesta del usuario en el mensaje
                msg.Completed += (s, args) =>
                {
                    //switch en las opciones del mensaje
                    switch (args.PopUpResult.ToString())
                    {
                        //case ok 
                        case "Ok":
                            //abrimos el taskreview
                            Microsoft.Phone.Tasks.MarketplaceReviewTask review = new Microsoft.Phone.Tasks.MarketplaceReviewTask();
                            review.Show();
                            break;

                        default:
                            //TODO : HAS LO QUE QUIERAS AQUÍ
                            break;

                    }

                    //Revisamos  si el usuario activo checkbox
                    if (checkbx.IsChecked == true)
                        this.valuesChanged(true, NeverShow);

                    //volvemos a reaniciar las keys para que se repita el ciclo
                    else
                    {
                        this.valuesChanged(0, UserCount);
                        this.valuesChanged(0, CurrentCount);
                    }


                };
                //Mostramos el mensaje
                msg.Show();
                //
                VibrateController vibrar = VibrateController.Default;
                vibrar.Start(TimeSpan.FromSeconds(1));
            }
        }


        /// 
        /// Metodo que invocamos en el evento  Application_Closing y sirve para registrar las veces que ha salido el usuario a la app
        /// 
        public void addCountApp()
        {
            int count = (int)settings[CurrentCount];
            count++;
            this.valuesChanged(count, CurrentCount);
        }






    }
}

¿Cómo usar la clase?

En realidad es muy sencillo lo único que tienes que hacer es declarar una variable estática de la clase en tu app.xaml.cs
 public static Reminder reminder = new Reminder();
Lo que sigue es capturar cuando el usuario ha dejado de usar la aplicación para aumentar el valor de nuestra key "CurrentCount" para esto en el evento Application_Closing debemos de llamar al evento AddCountApp de nuestra clase.
 private void Application_Closing(object sender, ClosingEventArgs e)
 {
            reminder.addCountApp();   
 }
Por último en el evento OnNavigatedTo del MainPage.xaml.cs (code behind) llamamos al método show
      protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {

            App.reminder.titulo = "Ayudanos calificando esta app";
            App.reminder.content = "Tu opinión es muy importante por favor cuentanos que es lo que piensas de la app :) ";
            App.reminder.RecurrenceUserCount = 2; //se mostrará la segunda vez que entre el usuario
            App.reminder.checkboxContent = "no volver a mostrar este mensaje jamás";
            App.reminder.show();

            base.OnNavigatedTo(e);
        }
Aquí el resultado que se obtiene.

domingo, 1 de septiembre de 2013

Politicas Privacidad Pixel Editor Pro

Esta aplicación no comparte tu información personal con ninguna fuente externa
política de privacidad está sujeta a cambios sin previo aviso y se actualizó por última vez el 01/09/2013. Si usted tiene alguna pregunta no dude en ponerse en contacto conmigo directamente en Email.

domingo, 25 de agosto de 2013

WinStickyNotes 2.0

Spanish

Esta aplicación no comparte tu información personal con ninguna fuente externa
política de privacidad está sujeta a cambios sin previo aviso y se actualizó por última vez el 02/07/2013. Si usted tiene alguna pregunta no dude en ponerse en contacto conmigo directamente en Email.

English

This application does not share personal information with third parties nor does it store any information about you.

This privacy policy is subject to change without notice and was last updated on 02/07/2013. If you have any questions feel free to contact me directly at Email.

sábado, 24 de agosto de 2013

Kids Coloring-Book PRO

Esta aplicación no comparte tu información personal con ninguna fuente externa política de privacidad está sujeta a cambios sin previo aviso y se actualizó por última vez el 02/07/2013. Si usted tiene alguna pregunta no dude en ponerse en contacto conmigo directamente en Email.

viernes, 23 de agosto de 2013

LUPA MÁGICA 2.0

Esta aplicación no comparte tu información personal con ninguna fuente externa
política de privacidad está sujeta a cambios sin previo aviso y se actualizó por última vez el 02/07/2013. Si usted tiene alguna pregunta no dude en ponerse en contacto conmigo directamente en Email.

miércoles, 21 de agosto de 2013

Cronometro Pro 2.0

Esta aplicación no comparte tu información personal con ninguna fuente externa política de privacidad está sujeta a cambios sin previo aviso y se actualizó por última vez el 02/07/2013. Si usted tiene alguna pregunta no dude en ponerse en contacto conmigo directamente en Email.

lunes, 19 de agosto de 2013

WinPharsalVerbs PRO

Esta aplicación no comparte tu información personal con ninguna fuente externa política de privacidad está sujeta a cambios sin previo aviso y se actualizó por última vez el 02/07/2013. Si usted tiene alguna pregunta no dude en ponerse en contacto conmigo directamente en Email.

domingo, 11 de agosto de 2013

MemeGeneratorWin8

Esta aplicación no comparte tu información personal con ninguna fuente externa política de privacidad está sujeta a cambios sin previo aviso y se actualizó por última vez el 02/07/2013. Si usted tiene alguna pregunta no dude en ponerse en contacto conmigo directamente en Email.

domingo, 4 de agosto de 2013

FUNNY FACE SOPORTE VISUAL

Capturas pantalla de la aplicación

Actualización ahora la aplicación ya se encuentra en la click aqui para verla en la store

¿Qués es Funny Face?

Funny face es una aplicación con la que podrás editar las rostros de tus amigos de una manera sencilla y divertida. La aplicación contiene más de 200 objetos como gorras , lentes , bigotes y pelucas también tu serás capaz de compartir la imagen en redes sociales o guardarla. Funny face es una aplicación que debes tener así que no lo dudes y descárgala ahora.

¿Cuáles son sus principales funciones?

  • Más de 200 objetos para personalizar tu foto.
  • Capacidad de agregar texto.
  • Capacidad de imprimir.
  • Capacidad de compartir fotos en redes sociales.
  • Capacidad de tomar fotos de tu cámara web.
  • Soporte de los 4 tipos de vista(Landscape,Filled,Snapp y Portrait).
  • Integración de livetiles.

¿En cuántos idomas se encuentra disponible Funny Face?

Funny Face se encuentra disponible en 5 idiomas
  • Inglés
  • Español
  • Portugués
  • Frances
  • Italiano

¿Qué tipo de tecnologías utiliza?

HTML5 ,CSS3 y Javascript

¿Quién es el desarrollador de esta app?

Oscar Emilio Pérez Martínez contactame en facebook

viernes, 2 de agosto de 2013

Funny Face

Spanish

Esta aplicación no comparte tu información personal con ninguna fuente externa
política de privacidad está sujeta a cambios sin previo aviso y se actualizó por última vez el 02/07/2013. Si usted tiene alguna pregunta no dude en ponerse en contacto conmigo directamente en Email.

English

This application does not share personal information with third parties nor does it store any information about you.

This privacy policy is subject to change without notice and was last updated on 02/07/2013. If you have any questions feel free to contact me directly at Email.

Italian

Questa applicazione non condividere informazioni personali con terzi, né memorizzare qualsiasi informazione su di te.

Questa politica sulla privacy è soggetta a modifiche senza preavviso ed è stato aggiornato il 02/07/2013. Se avete domande non esitate a contattarmi direttamente al Email .

French

Cette application ne partage pas vos informations personnelles avec des tiers ni ne stocke aucune information sur vous.

Cette politique de confidentialité est sujette à changement sans préavis et a été mis à jour le 02/07/2013. Si vous avez des questions n'hésitez pas à me contacter directement à l'adresse Email .

Portugese

Este aplicativo não compartilhar informações pessoais com terceiros, nem armazena nenhuma informação sobre você.

Esta política de privacidade está sujeita a alterações sem aviso prévio e foi atualizado em 2013/02/07 passado. Se você tiver alguma dúvida não hesite em contactar-me directamente em e-mail .

lunes, 8 de julio de 2013

Keep Calm Generator

English

This application does not share personal information with third parties nor does it store any information about you.
This privacy policy is subject to change without notice and was last updated on 02/07/2013. If you have any questions feel free to contact me directly at Email.

Spanish

Esta aplicación no comparte tu información personal con ninguna fuente externa
política de privacidad está sujeta a cambios sin previo aviso y se actualizó por última vez el 02/07/2013. Si usted tiene alguna pregunta no dude en ponerse en contacto conmigo directamente en Email.

Italian

Questa applicazione non condividere informazioni personali con terzi, né memorizzare qualsiasi informazione su di te.
Questa politica sulla privacy è soggetta a modifiche senza preavviso ed è stato aggiornato il 02/07/2013. Se avete domande non esitate a contattarmi direttamente al Email .

miércoles, 12 de junio de 2013

HUB-NOTES

Esta aplicación solo hace uso del internet para crear el backup de las "notas" no colectecta información personal del usuario.

Esta aplicativo  acessa a  internet para criar um backup das "notas" não coleta  nenhuma informação do usuário.

This application only makes use of the internet to create a backup of the "notes" does not collect personal information.



domingo, 28 de abril de 2013

.Txt Viewer PRO Privacy Policy (Politicas de Privacidad)

Español

Esta aplicación solo hace uso del Internet para aplicar la función de "text - to speech" , nunca hará uso de su información personal. 

English

This application only makes use of the Internet to implement the function "text - to speech" will never use your personal information.

miércoles, 27 de marzo de 2013

Translator English-Spanish PRO Privacy Policy (Politicas de Privacidad)

English

This app only uses the internet to translate, never will expose your personal data

Español

Esta app solo hace uso de internet para obtener las traducir texto , jamás expondra tus datos personales

martes, 26 de marzo de 2013

Currency-Convertor privacy statement (politicas de privacidad)

English

This app only uses the internet to obtain the currency of the day, never will expose your personal data

Español

Esta app solo hace uso de internet para obtener las divisas del día , jamás expondra tus datos personales

martes, 1 de enero de 2013

ARCHIVO HOST Y .NET

Hola compañeros bueno les comento que hace unos meses se me ocurrió la idea de crear alguna aplicación que bloqueara paginas web. Estuve investigando un poco y encontré el poderoso Archivo Hosts al principio no sabia en realidad en que lenguaje programar la aplicación ya que hay una gran gama de estos (Java , C# , JavaScript ,Vb.net , etc.) pero finalmente me decidí por crear la aplicación en .Net (C# y Vb.net). Pero primero me gustaría comentarles como funciona el archivo hosts es solo un pequeño archivo de texto que Windows utiliza como un servidor DNS en nuestra PC, cualquier petición de una dirección URL que se introduzca en el navegador, Windows comprobará primero si existe alguna referencia a ella en el archivo hosts, si es asi utilizará la dirección IP registrada en el para realizar la conexión. El archivo hosts se encuentra en la siguiente ruta en todos los equipos:

C:\Windows\System32\drivers\etc

Todas las líneas que comienzan con el carácter # son solo comentarios. En la última fila, la combinación de números en la primera columna es la dirección IP donde Windows buscará el dominio. Para impedir el acceso a una página web, solo es necesario incluir en el archivo host una dirección IP que no le corresponda o preferentemente no sea válida, es decir que no conduzca a ningún lado. Por ejemplo para impedir el acceso a la página de ejemplo: http://sitio.com/pagina.htm puedes usar la IP 127.0.0.1 que es la del equipo local o la que se muestra en este caso que es una dirección IP inválida:

Ahora empezando un poco con la programación

Primer paso creamos nuestro algorimo

  • Ubicamos la ruta C:\WINDOWS\system32\drivers\etc
  • Abrimos el archive llamado hosts
  • Escribir la url de la pagina web
  • Cerrar el archivo
*Nota importante debe existir un espacio entre la dirección IP y el nombre del dominio Es muy importante porque enserio que no funciona si no ponemos ese espacio XD

Agregar permisos de administrador

Debemos de tomar en cuenta que el archivo hosts es un archivo protedigo es por esto que debemos de modificar nuestra aplicación para esto debemos de hacer los siguiente pasos

  1. Abrir el explorador de soluciones
  2. Dar click derecho y escojer la opción agregar componente
  3. Escojemos la opción que dice archivo mainifiesto

Nos saldra el app.manifiest como el de la siguiente imagen

lo unico que tenemos que cambiar es el requestedExecutionLevel level="asInvoker" uiAccess="false"

por esto

requestedExecutionLevel level="requireAdministrator" uiAccess="false"

Lo unico que hacemos es que nuestra app corra con permisosde administrador

Tercer paso“Crear una clase”

Como segundo paso vamos a crear una clase llamada EdicionArchivo.cs ( C#) ó EdicionArchivo.vb (Vb.net) esta clase básicamente tendrá tres procedimientos

  1. EscribirPagina Este procedimiento toma como parámetro un string llamado PaginaWeb donde insertaremos la url de la pagina web que queremos bloquear, como podemos ver hacemos uso del namespace system.io para poder tener acceso al archivo

  2. LeerArchivo Este procedimiento toma como parámetro una variable de tipo object llamadamilistadespués dentro de este procedimiento hacemos un cast para convertilo en un objeto de tipo listbox declaramos una variable llamada myarray y utilizamos el método File.ReadAllLines(Básicamente lo que hace es abrir un archivo de texto, lee todas sus líneas, las introduce en una matriz de cadenas) ; sin embargo no queremos leer todas las líneas del archivo es por esto que hacemos uso de linq para hacer nuestra query.Despues de crear la query convertimos los resultados obtenidos en un array y con un ciclo for llenamos el listbox con cada elemento del array

  3. BorrarPagina Este procedimiento vuelve a tomar como parámetro un string llamado PaginaWeb igual como mencioné anteriormente es donde inserteremos la url de la pagina web también volvemos hacer uso del método File.ReadAllLines lo único nuevo es que utilizamos es el procedimiento remplace y el método WriteAllText que lo que hace es escribir una cadena especificada en archivo y, a continuación, lo cierra. Si el archivo de destino ya existe, se sobrescribe. y en el método remplace lo que hacemos es “remplazar” el string obtenido de la url y remplazarlo por Nada

[C#]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Diagnostics;
using System.Collections;
using System.Windows.Forms;
namespace ArchivoHost
{
   public  class EdicionArchivo
    {
       //variable globla en la cual obtengo acesso al archivo hosts
       private String rutaArchivo=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts");

       //Procedimiento en el cual escribiremos dentro del archivo hosts
       public void EscribirPagina(String PaginaWeb)
       {
           
                    using(StreamWriter Miwriter =File.AppendText(rutaArchivo))
                    {
                       
                        Miwriter.WriteLine(String.Format("127.0.0.1\t {0}",PaginaWeb));
                        Miwriter.Close();
                    }

                    
                    //Mandamos un msgbox para ver si el usuario quiere ver el archivo

                    if(MessageBox.Show("Desea abir el archivo ahora?","",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
                    Process.Start(rutaArchivo);//abro el archivo host
        
       }

       public void LeerArchivo(Object milista)
       {
          ListBox lista = (ListBox)milista;//Hago el cast de mi objeto a un listbox
          var miarray = File.ReadAllLines(rutaArchivo).Where(m => m.StartsWith("127.0.0.1")).ToArray();//Hago una consulta con linq  y la convierto en un array
          for (int j = 0; j < miarray.Length; j++) 
          {
              lista.Items.Add(miarray[j]);//Lleno mi lista con cada elemento de mi array 
             
          }



       }

       public void BorrarPagina(String PaginaWeb)
       {
           String  strFile = File.ReadAllText(rutaArchivo);//Obtengo todo el texto del archivo

           strFile = strFile.Replace(PaginaWeb,String.Empty);//Remplazo  el string obtenido osea la pagina web
           File.WriteAllText(rutaArchivo, strFile);// Vuelvo a escribir el archivo
           MessageBox.Show("Pagina web desbloqueada exitosamente");//enviamos mensaje de confirmacion
       }


    }
}


[VB.NET]

Imports System.Linq
Imports System.IO

Public Class EdicionArchivovb
    '//variable globla en la cual obtengo acesso al archivo hosts
    Private rutaArchivo As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts")
    '  //Procedimiento en el cual escribiremos dentro del archivo hosts
    Public Sub EscribirPagina(ByVal PaginaWeb As String)
        Using Miwriter As StreamWriter = File.AppendText(rutaArchivo)
            Miwriter.WriteLine(String.Format("127.0.0.1{0} {1}", vbTab, PaginaWeb))
            Miwriter.Close()
        End Using
        '//Mandamos un msgbox para ver si el usuario quiere ver el archivo
        If (MessageBox.Show("Desea abir el archivo ahora?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes) Then
            Process.Start(rutaArchivo) '//abro el archivo host
        End If
    End Sub
    Public Sub LeerArchivo(ByVal milista As Object)
        Dim lista As ListBox = DirectCast(milista, ListBox)
        'Hago el cast de mi objeto a un listbox
        Dim miarray = File.ReadAllLines(rutaArchivo).Where(Function(m) m.StartsWith("127.0.0.1")).ToArray()
        'Hago una consulta con linq  y la convierto en un array
        For j As Integer = 0 To miarray.Length - 1
            'Lleno mi lista con cada elemento de mi array 
            lista.Items.Add(miarray(j))
        Next
    End Sub

    Public Sub BorrarPagina(ByVal PaginaWeb As String)
        Dim strFile As [String] = File.ReadAllText(rutaArchivo)
        'Obtengo todo el texto del archivo
        strFile = strFile.Replace(PaginaWeb, [String].Empty)
        'Remplazo  el string obtenido osea la pagina web
        File.WriteAllText(rutaArchivo, strFile)
        ' Vuelvo a escribir el archivo
        MessageBox.Show("Pagina web desbloqueada exitosamente")
        'enviamos mensaje de confirmacion
    End Sub
End Class

Crear un formulario para ver los resultados

Bueno ahora lo que necesitamos es construir nuestro formulario el cual contendrá los siguientes objetos:

  • Un textbox que nos servirá para poner el url de las paginas web
  • Dos botones uno sera para bloquear paginas y el otro para desbloquearlas
  • Un listbox para llenarlo con el texto que esta en el archivo hosts

Nuestro formulario debe quedar algo así como el de la siguiente imagen


Lo que necesitamos ahora es declarar un par de variables gloables en la clase de nuestro formulario

[C#]

private EdicionArchivo miedicion = new EdicionArchivo();//Declaro y hago instancia a mi clase 
         private String PaginaWeb;//Variable que se utilizará para obtener el texto de mi textbox
         private ErrorProvider Mierror = new ErrorProvider();//Control que servirá para el control de errores

[VB.NET]

Private miedicion As New EdicionArchivovb() '//Declaro y hago instancia a mi clase 
    Private PaginaWeb As String '//Variable que se utilizará para obtener el texto de mi textbox
    Private Mierror As New ErrorProvider() '//Control que servirá para el control de errores

En el evento load de nuesto formulario hacemos referencia a nuestro procedimiento llamado LeerArchivo

[C#]

 private void Form1_Load(object sender, EventArgs e)
        {

            miedicion.LeerArchivo(listBox1);//LLamamos al procedimientyo de mi clase 
        }

[VB.NET]

  Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        miedicion.LeerArchivo(ListBox1)
    End Sub

Ahora por ultimo lo que necesitamos hacer controlar el evento click de nuestro boton

  • En el boton llamado Bloquear debemos de verificar si la url esrita es correcta , se que no es el mejor procedimiento pero lo que yo hice es recorrer cada caracter de mi variable y verificar si tiene las "3 w" si es así procedemos a llamar a nuestro procedimiento que se llama EscribirPagina

  • En el boton llamdo desbloquear lo que debemos verificar es que este seleccionado un item de nuestro listbox , de caso contrario mandara un msgbox advirtiendo que no ha seleccionado ningún elemento, si esta seleccionado un item de nuestro listbox llamamos a nuestro procedimiento BorrarPagina

[C#]


        private void btnBloquear_Click(object sender, EventArgs e)
        {
            PaginaWeb = textpagina.Text;

            if (!String.IsNullOrEmpty(PaginaWeb))//Verifico que mi string no este vacio
            {
                int cont = 0;

                for (int j = 0; j < PaginaWeb.Length; j++)//Recorremos cada uno de los caracteres de mi string y verifico si contiene la letra 'w'
                {
                    if (PaginaWeb[j] == 'w')
                        cont++;
                }

                //Si el contador es igual a 3 , es decir www
                if (cont >= 3)
                {
                    miedicion.EscribirPagina(PaginaWeb);
                    listBox1.Items.Clear();
                    miedicion.LeerArchivo(listBox1);
                }
                else
                    Mierror.SetError(textpagina, "URL NO VALIDA :(");
            }
        }

        private void BtnDesbloquear_Click(object sender, EventArgs e)
        {

            if (listBox1.SelectedIndex != -1)//Verificamos que el usuario haya seleccionado un elemento de mi listbox
            {
                miedicion.BorrarPagina(listBox1.SelectedItem.ToString());

                listBox1.Items.Clear();//Limpio los elementos contenidos en el listbox para proceder actualizarlos
                miedicion.LeerArchivo(listBox1);//Llamamos a mi procedimiento para volver a llenar la lista
            }
            else //De caso contrario si no ha seleccionado ningun elemento
                MessageBox.Show("Seleccione un elemento de la lista por favor", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

[VB.NET]

Private Sub btnBloquear_Click(sender As System.Object, e As System.EventArgs) Handles btnBloquear.Click
        PaginaWeb = textpagina.Text

        If (Not String.IsNullOrEmpty(PaginaWeb)) Then '//Verifico que mi string no este vacio

            Dim cont As Integer = 0

            For j As Integer = 0 To PaginaWeb.Length - 1
                'Recorremos cada uno de los caracteres de mi string y verifico si contiene la letra 'w'
                If PaginaWeb(j) = "w"c Then
                    cont += 1
                End If
            Next

            ' //Si el contador es igual a 3 , es decir www
            If (cont >= 3) Then

                miedicion.EscribirPagina(PaginaWeb)
                ListBox1.Items.Clear()
                miedicion.LeerArchivo(ListBox1)

            Else
                Mierror.SetError(textpagina, "URL NO VALIDA :(")
            End If
        End If

    End Sub

    Private Sub BtnDesbloquear_Click(sender As System.Object, e As System.EventArgs) Handles BtnDesbloquear.Click
        If ListBox1.SelectedIndex <> -1 Then
            'Verificamos que el usuario haya seleccionado un elemento de mi listbox
            miedicion.BorrarPagina(ListBox1.SelectedItem.ToString())
            ListBox1.Items.Clear()
            'Limpio los elementos contenidos en el listbox para proceder actualizarlos
            'Llamamos a mi procedimiento para volver a llenar la lista
            miedicion.LeerArchivo(ListBox1)
        Else
            'De caso contrario si no ha seleccionado ningun elemento
            MessageBox.Show("Seleccione un elemento de la lista por favor", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        End If
    End Sub

Les dejo unas capturas de pantalla de la aplicación

Desbloqueando pagina web

Bloqueando pagina web

Descarga las soluciones!!

Espero que les haya gustadó espero sus comentarios gracias