Gtk.FileChooserDialog: Abrir y Guardar archivos de Texto
En este artículo vamos a crear un editor de texto muy simple, con el cual podremos abrir archivos de texto, modificarlos y guardarlos. Para lograr nuestro objetivo, aprenderemos a usar el Gtk.FileChooserDialog, y de paso aprenderemos un poco más sobre Gtk.TextView y Gtk.ScrolledWindow.El Gtk.FileChooserDialog (Ver Documentación) es un cuadro de diálogo que nos permite navegar por el sistema de archivos y seleccionar archivos o directorios. Adecuado para acciones de tipo abrir y guardar.
Para este ejemplo estoy usando MonoDevelop 0.14 en un Debian Inestable y como siempre, empezaremos en el menú "Archivo" y "Nuevo proyecto...". Seleccionaremos "Proyecto Gtk# 2.0" y le pondremos un nombre, por ejemplo: "EditorTexto".
Para crear nuestro editor de texto vamos a usar un Gtk.TextView donde podremos ver y editar texto, sin embargo este widget no maneja un "Scroll" en si mismo. Esta es una de las tantas peculiaridades de Gtk. Para solventar este detalle se usa Gtk.ScrolledWindow el cual se debe incluir antes del TextView. Para demostrarlo he preparado un video que se muestra al dar un click sobre la siguiente imagen.
En la imagen anterior vemos el orden jerárquico y de estructura de los widgets usados en este proyecto, cuyas propiedades son:
| Gtk.ScrolledWindow | |
|---|---|
| Nombre del widget | scrolledwindowEditor |
| Gtk.TextView | |
|---|---|
| Nombre del widget | textviewEditor |
| Gtk.Button | |
|---|---|
| Nombre del widget | buttonOpen |
| Button Type | Stock button |
| Stock item | gtk-open |
| Gtk.Button | |
|---|---|
| Nombre del widget | buttonSave |
| Button Type | Stock button |
| Stock item | gtk-save |
Muy bien ya tenemos los elementos gráficos de nuestro editor de texto, ahora lo único que debemos hacer es definir las señales de los botones. Para ello solo es necesario seleccionar el botón de "Abrir", vamos a la pestaña de "Señales" y por último doble click en la señal "
Clicked", de esta forma se va a crear el nombre "OnButtonOpenClicked" de la señal automáticamente. Hacemos lo mismo para el botón "Guardar".
Después de todo lo anterior deberá quedarnos un código fuente similar al siguiente:
using System; using Gtk; public partial class MainWindow: Gtk.Window { public MainWindow (): base (Gtk.WindowType.Toplevel) { Build (); } protected void OnDeleteEvent (object sender, DeleteEventArgs a) { Application.Quit (); a.RetVal = true; } protected virtual void OnButtonOpenClicked (object sender, System.EventArgs e) { } protected virtual void OnButtonSaveClicked (object sender, System.EventArgs e) { } }
Abrir un archivo de Texto
Empezaremos por abrir un archivo de texto, por medio de Gtk.FileChooserDialog. Para ello trabajaremos dentro de la señal "OnButtonOpenClicked".// Creamos un FileChooserDialog FileChooserDialog chooser = new FileChooserDialog ("Abrir Archivo", this, FileChooserAction.Open); chooser.AddButton (Gtk.Stock.Cancel, ResponseType.Cancel); chooser.AddButton (Gtk.Stock.Open, ResponseType.Ok);
Como podemos ver, en la variable
chooser asignamos el FileChooserDialog al que le mandamos los parametros:- title: Titulo de la ventana de diálogo
- parent: Padre de la Ventana de diálogo
- action: La acción a ejecutar definida en Gtk.FileChooserAction
Un
FileChooserDialog no es mas que un Gtk.Dialog con un Gtk.FileChooserWidget agregado, por lo que el FileChooserDialog hereda los métodos de Gtk.Dialog, es por eso que podemos usar "chooser.AddButton" para agregar dos botones de stock: un "cancel" que nos responderá con un "cancel" y un "open" que nos responderá con un "OK".Nota: Para los que hayan leído mi otro artículo llamado "Gtk.Dialog: Ventanas de Dialogo Modales" podrán notar que el uso es muy parecido.
Ok, ya viene lo interesante, como volcar un archivo de texto en el
TextView. Para ello usaremos las librerías de System.IO la cual debemos de incluir en nuestro proyecto de esta forma:using System; using Gtk; using System.IO;
Ahora sí, ya todo esta preparado para continuar dentro de
OnButtonOpenClicked agregando las siguientes líneas:// Abrir un archivo de texto y ponerlo en el TextView if ((ResponseType) chooser.Run () == ResponseType.Ok) { Uri uri = new Uri (chooser.Uri); if (File.Exists(uri.AbsolutePath)){ try { StreamReader sr = new StreamReader (uri.AbsolutePath); string content = sr.ReadToEnd (); sr.Close (); textviewEditor.Buffer.Text = content; } catch (Exception ex){ Console.WriteLine (ex.Message); } } } chooser.Destroy ();
Me parece que el código se entiende bastante bien, solo hay algunos puntos a resaltar por su importancia.
El archivo seleccionado se puede capturar por medio de
chooser.Uri y por medio de un StreamReader se puede leer el archivo para después asignarlo al buffer del textviewEditor.
Guardar un Archivo de Texto
Llegamos a la última parte, como guardar un archivo de texto; para ello trabajaremos en la señalOnButtonSaveClicked.Tal como pasó con la apertura de un archivo de texto, debemos crear el onjeto Gtk.FileChooserWidget, sin embargo, ahora con una pequeño agregado.// Creamos un FileChooserDialog FileChooserDialog chooser = new FileChooserDialog ("Guardar Archivo", this, FileChooserAction.Save); chooser.DoOverwriteConfirmation = true; chooser.AddButton (Gtk.Stock.Cancel, ResponseType.Cancel); chooser.AddButton (Gtk.Stock.Save, ResponseType.Ok);
Como estamos trabajando en el guardado de un archivo, es importante que el mismo diálogo verifique si el archivo que vamos a escribir ya existe previamente, por lo que usamos DoOverwriteConfirmation para que esta revisión se haga de forma automática y le pregunte al usuario si desea reescribir ese archivo.
Y ya por último solo falta el código para crear o reescribir el archivo de texto.
// Se seleciona un archivo de texto y se guarda if ((ResponseType) chooser.Run () == ResponseType.Ok) { Uri uri = new Uri (chooser.Uri); try { StreamWriter sr = new StreamWriter (uri.AbsolutePath, false); sr.Write (textviewEditor.Buffer.Text); sr.Close (); } catch (Exception ex){ Console.WriteLine (ex.Message); } } chooser.Destroy ();
Al final deberíamos de tener nuestro Editor de Texto básico corriendo y se vería más o menos así:
Por el momento eso es todo, espero que este artículo les sea de utilidad y como siempre el proyecto y código relacionado a este artículo, están disponibles para su descarga en los siguientes archivos.
| Adjunto | Tamaño |
|---|---|
| EditorTexto.tar.gz | 3.98 KB |
![]() |
Me gusto muchisimo este tutorial y todos los demas. Recomendaciones para proximos Articulos; Tocar los Temas de: Vengo de Trabajar con Visual Studio; Ahora me estoy "dando puñal" con linux y la verdad que los websites (Foros, Comunidades) de ejemplos practicos de MonoDevelop son muy pocos; creo que este es uno de los mejores, por sus excelentes articulos. Me gustaria algun dia empezar a aportar en estos temos e ir a la vanguardia en temas tan relevantes como toolkit(widgets) de AJAX y mas... |
![]() |
Hola estaba mirando el código y donde pones: FileChooserDialog chooser = new FileChooserDialog ("Abrir Archivo", this, FileChooserAction.Open);
chooser.AddButton (Gtk.Stock.Cancel, ResponseType.Cancel);
chooser.AddButton (Gtk.Stock.Open, ResponseType.Ok);
falta el * a chooser FileChooserDialog *chooser = new FileChooserDialog ("Abrir Archivo", this, FileChooserAction.Open); |
![]() |
Hola, muchas gracias por tu aporte, sin embargo me gustaría que nos amplíes tus razones y/o ventajas que nos ofrece el redefinir la variable normal ( chooser) a una variable puntero (*chooser).Saludos |
![]() |
hOLA, COMO TE DIJE ANTES, ESTAN MUY BUENOS TUS TUTOS PERO HACEN FALTA MAS MAS MAS MAS!!! :-) JEJE EN SERIO, POR FAVOR PONE MAS, ME ESTA GUSTANDO MUCHO ESTO DE PROGRAMAR CON MONO, AHI UN TUTO QUE ME GUSTARIA QUE HICIERA Y CREO QUE NO ES MUY LARGO: "COMO INSTALAR Y EJECUTAR LAS APLICACIONES CREADAS CON MONO EN WINDOWS" TRATE DE PROBAR UNOS PROGRAMITAS QUE HABIA HECHO CON EL MONO PERO NO LOS PUDE EJECUTAR EN WINDOWS, XQ SERA? |
![]() |
Muchísimas gracias por tus comentarios, a veces mi chamba no me deja mucho tiempo libre, pero trataré de hacer mas artículos. Por otro lado para que corra en Windows es fácil, necesitas el .NET framework de la versión en que programaste y necesitas instalar además el GtK# que puedes descargar de aqui: http://forge.novell.com/modules/xfmod/project/?gtks-inst4win En teoría solo con eso deberías de ver tu aplicacion corriendo en windows. Saludos |
![]() |
Muy buenos los tutos, creo que en la Web es el mas ilustrativo. Aver cuando sacas uno en desarrollo WEB com monodevelop 1.0, con coneccion a base de Datos(Npgsql con postgresql) con una estructura MVC(Utilizando Nhibernate). Como sabras no hay mucha informacion, este comentario es muy avanzado para lo que vi hasta ahora en los tutos, me gustaria mucho que pongas algo sobre esto, de antemano muchas gracias que servira para mi investigacion de mi tesis. Saludos para todos los desarrolladores en estas tecnologias vanguardistas. |



Como me alegro que sigas haciendo estos minitutoriales para manejar MonoDevelop ya que no hay páginas donde encontrar información.
Espero que haya una continuidad en los artículos y tutoriales y que la gente se anime en los foros para crear una pequeña comunidad.
Gracias de un principiante de MonoDevelop.