Mini Explorador 2 – Menú ToolTip, Abrir, modificar y Eliminar Archivos


En el post Anterior, se vio como listar los archivos y carpetas de las unidades de almacenamiento, lo que haremos ahora es poder Abrir un archivo, Modificar el nombre de un archivo y Eliminar un archivo.

Para hacer esto, usaremos el control ContextMenuStrip, que es útil para adicionar un Menú que se activa con el clic derecho del Mouse.

Cargamos el proyecto que teníamos anteriormente, y adicionamos al proyecto el control ContextMenuStrip, localizado en la barra de Herramientas:

 

Para adicionarle ítems al menú, lo podemos hacer en el diseño:

 

Para adicionar un menú contextual a un control, lo hacemos modificando la propiedad ContextMenuStrip del control:

 

Nosotros lo haremos por código, para hacer que solo se muestre el menú cuando tengamos seleccionado un nodo, si no , el menú va a aparecer cada vez que hagamos clic derecho sobre cualquier parte del TreeView, en los eventos del control TreeView, adicionamos el de NodeMouseClick.

Para hacer esto, en la misma ventana de las propiedades, seleccionamos el icono del “rayo” y luego buscamos el evento NodeMouseClick, luego hacemos doble clic al frente del evento:

 

Al hacerlo se crea automáticamente un evento en el código, en este evento vamos a verificar que cada vez que se presione el botón derecho del Mouse, y haya un Nodo seleccionado, y este sea un archivo aparezca el Menú contextual:


private void trvCarpetas_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)

{

 if (e.Button == MouseButtons.Right)

 {

  this.trvCarpetas.SelectedNode = e.Node;

  if (e.Node != null) //click on the root

   {

    String carpeta = trvCarpetas.SelectedNode.FullPath;

    String Disco = lstDiscos.SelectedItem.ToString();

    DirectoryInfo file = new DirectoryInfo(Path.Combine(Disco, carpeta));

    String atributos = file.Attributes.ToString();

    if (!atributos.Contains(FileAttributes.Directory.ToString()))

      {

        this.contextMenuStrip1.Show(this.trvCarpetas, e.Location);

      }

   }

 }

}

 

Ahora para saber si se presiono el menú contextual, creamos un evento MouseClick, igual que hicimos con el evento NodeMouseClick, en este evento verificamos si se selecciono algún ítem, y dependiendo del ítem hacemos algo.

Abrir Documentos:

Estuve investigando y para abrir un documento desde C# podemos usar la clase Process, del nombre de espacio Systems.Diagnostics, con esta clase podemos acceder a procesos locales y remotos, además de iniciar y detener procesos del sistema local, no vamos a profundizar mucho, así que para abrir un documento creamos un método llamado EjecutarArchivo, este método recibirá el directorio del archivo, y el nombre del archivo, luego se llamará el método Start() de la clase Process, al abrir el archivo, se abrirá con el archivo predeterminado.

Código del método EjecutarArchivo:


private void EjecutarArchivo(String pathFile, String nameFile)

{

 using (Process pr = new Process())

  {

   pr.StartInfo.FileName = nameFile;

   pr.StartInfo.WorkingDirectory = pathFile;

   pr.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

   pr.Start();

  }

}

En la propiedad FileName se asigna el nombre del archivo que se va a ejecutar, en la propiedad WorkingDirectory el directorio del archivo, la propiedad WindowStyle es para asignar si se va a mostrar una ventana de comandos, si se muestra maximizada, minimizada, después se ejecuta el método Start para iniciar el proceso.

Y en el método de contextMenuStrip1_MouseClick adicionamos la verificación de que ítem del menú fue presionado y si es el de Aceptar, llamar el método EjecutarArchivo:


private void contextMenuStrip1_MouseClick(object sender, MouseEventArgs e)

{

 String carpeta = trvCarpetas.SelectedNode.Parent.FullPath;

 String nombreArchivo = trvCarpetas.SelectedNode.Text;

 String Disco = lstDiscos.SelectedItem.ToString();

<p>&nbsp;</p>

 if (contextMenuStrip1.Items[0].Selected)

  {

   // abrir el archivo

   EjecutarArchivo(Path.Combine(Disco, carpeta), nombreArchivo);

  }

}

La propiedad FullPath devuelve la ruta completa del archivo.

Editar el Nombre de un archivo:

Para editar un nodo, se debe modificar la propiedad LabelEdit  del TreeView en true y se llama el método BeginEdit().

Además de modificar el nombre del nodo, debemos hacer uso de la clase File y del Método Move, para cambiar el nombre del archivo, este método recibe dos parámetros: la ruta anterior y la ruta nueva.

En nuestro caso, cuando se termine de modificar el nodo, se ejecuta el evento trvCarpetas_AfterLabelEdit, para activar dicho evento debemos hacer lo explicado anteriormente, en este evento el nuevo nombre va en el parámetro de tipo NodeLabelEditEventArgs, en la propiedad Label, lo que se va a hacer en este evento es: guardar el nombre anterior,luego renombramos el archivo, informamos del cambio y dejamos la propiedad LabelEdit en false.

En el evento AfterLabelEdit:


private void trvCarpetas_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)

{

  String carpeta = trvCarpetas.SelectedNode.Parent.FullPath;

  String nombreArchivo = trvCarpetas.SelectedNode.Text;

  String Disco = lstDiscos.SelectedItem.ToString();

  File.Move(Path.Combine(Path.Combine(Disco, carpeta), nombreArchivo), Path.Combine(Path.Combine(Disco, carpeta), e.Label));

  trvCarpetas.LabelEdit = false;

  MessageBox.Show(String.Format("Se modificó el nombre del archivo {0} por el de {1}",nombreArchivo,e.Label));

}

Y en el MouseClick del Menu contextual adicionamos:

else if (contextMenuStrip1.Items[1].Selected)

{

// modificar archivo

 trvCarpetas.LabelEdit = true;

 trvCarpetas.SelectedNode.BeginEdit();

}

     

Eliminar un Archivo:

Para eliminar un archivo, nuevamente usamos la clase File, y el método Delete, el método recibe como parámetro la ruta del archivo. Se puede presentar una excepción si el archivo no existe y si no se tienen los suficientes permisos para eliminarlo.

Antes de eliminar el archivo debemos pedir una confirmación, para crear un DialogBox, podemos usar el MessageBox:


if (MessageBox.Show("Está seguro de eliminar el archivo?", "Confirmación Eliminación", MessageBoxButtons.YesNo) == DialogResult.Yes)

{

}

Si se presiona el botón de Yes, se elimina el archivo y se elimina el nodo. En el código del evento MouseClick del Menu contextual adicionamos lo siguiente:


else if (contextMenuStrip1.Items[2].Selected)

{

 // Eliminar archivo

 if (MessageBox.Show("Está seguro de eliminar el archivo?", "Confirmación Eliminación", MessageBoxButtons.YesNo) == DialogResult.Yes)

  {

    try

     {

      File.Delete(Path.Combine(Path.Combine(Disco, carpeta), nombreArchivo));

      MessageBox.Show("Se eliminó el archivo: " + Path.Combine(Path.Combine(Disco, carpeta), nombreArchivo));

      trvCarpetas.SelectedNode.Remove();

     }

   catch (Exception ex)

     {

      MessageBox.Show(String.Format("Error eliminando el archivo {0}, el error es: {1}", nombreArchivo, ex.Message));

     }

   }

  }

2 pensamientos en “Mini Explorador 2 – Menú ToolTip, Abrir, modificar y Eliminar Archivos

  1. Excelente, justo lo que buscaba y funciona a la perfección, muchas gracias, es muy útil y muy funcional, al menos para mí lo es que soy estudiante y apenas comienzo el camino en la programación, muchas gracias

Deseas comentar o sugerir algo?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s