Está en la página 1de 27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

Cuadros de dilogo
En general, las cuadros de dilogo se utilizan para pedir datos o configurar variables
desde una aplicacin. La plataforma .NET proporciona cuadros de dilogo predefinidos
pero tambin permite que el programador configure cuadros de dilogo segn sus
necesidades. A continuacin se estudian estos ltimos y posteriormente se vern los que
proporciona la plataforma.

Cuadros de dilogo definidos por el usuario


En C# no existe una clase Dialog o DialogBox. Las cajas de dilogo son formularios
con unas propiedades predeterminadas:
a) Tiene tamao fijo. La propiedad FormBorderStyle debe ser FixedDialog.
b) No suelen tener los tres botones de la parte superior derecha de las ventanas
comunes de Windows Minimizar, Maximizar y Control- . Por eso, sus
propiedades MinimizedBox, MaximizedBox y ControlBox deben ser false.
Un cuadro de dilogo puede ser modal -cuando la propia aplicacin o formulario que
lo ha llamado no puede recibir ningn evento hasta que se ha cerrado el cuadro de
dilogo- o no modal el caso contrario-.
Para ejecutar un cuadro de dialogo modal se siguen los siguientes pasos:

Se crea y disea el formulario correspondiente al cuadro de dilogo. Dicho


formulario tendr en cuenta lo dicho anteriormente en los apartados a y b. En
general, el cuadro tendr, al menos, un botn Aceptar y un botn Cancelar,
con la funcin de cerrar el cuadro y de informar a la aplicacin que se
aceptan los datos que se han introducido o que se desea anular la
introduccin de dichos datos. Tambin se disean cuadros de dilogo con
solo el botn de Aceptar.
En el mtodo de la aplicacin que llama al cuadro de dilogo modal se crea
un objeto de la clase del cuadro de dilogo y dicho objeto invoca al mtodo
ShowDialog(). En ese momento la aplicacin detiene su ejecucin hasta que
se haya cerrado el cuadro de dilogo que le informa de cul ha sido el botn
pulsado. El cdigo podra ser algo as:
Dialogo dlg = new Dialogo();
dlg.ShowDialog();
MetodoQueHaceAlgo();

En este ejemplo, el mtodo MetodoQueHaceAlgo() no se ejecuta hasta que


se ha cerrado el cuadro de dilogo.
Si se llama a un cuadro de dilogo no modal habra que llamar al mtodo Show() en
lugar de ShowDialog(). Se abre entonces el cuadro de dilogo y se ejecutara el mtodo
MetodoQueHaceAlgo() sin esperar a que se cierre el cuadro. El control de este tipo de
cuadros es mucho ms complejo.

1/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

Ejemplo: trabajando con cuadros de dilogo definidos por el usuario


Esta aplicacin tiene un formulario llamado FormularioPrincipal, y un cuadro de
dilogo modal. El FormularioPrincipal puede abrir el cuadro de dilogo para
solicitar un dato -en este caso una frase- que se introduce en una caja de texto y se
devuelve como una cadena al propio formulario (figura 18.1).
El formulario FormularioPrincipal tiene una etiqueta para recoger la cadena desde el
cuadro de dialogo y dos botones btnDefinirFrase y btnSalir. El cuadro de dilogo
Dialogo tiene una caja de texto texto y dos botones btnOk y btnCancelar.
FormularioPrincipal llama al cuadro de dilogo desde btnDefinirFrase.

Figura 18.1. Se llama desde formulario principal a un cuadro de dilogo.


Una vez que se despliega el cuadro de dilogo, el usuario debe rellenar la caja de texto.
Posteriormente, si pulsa el btnOk, la cadena de la caja de texto debe pasar a la etiqueta
del FormularioPrincipal. Si se pulsase btnCancelar, se debe cancelar la operacin.
El botn btnOk del dilogo en realidad significa: Estoy de acuerdo con la eleccin. Por
favor, utiliza este valor en el programa y cierra el cuadro de dilogo. Y el
btnCancelar : Anula la eleccin, vuelve al estado anterior y cierra el cuadro de
dilogo.
Para asignar esta funcionalidad a los botones del formulario, deben utilizarse las
propiedades DialogResult de los botones btnOk y btnCancelar. Se le asigna el valor
DialogResult.Ok al primero y DialogResult.Cancel al segundo.
Pero, qu significa exactamente asignar un valor a la propiedad DialogResult de un
botn?.

2/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

Para contestar a esta pregunta es necesario saber que cuando se pulsa un botn del
dilogo suceden las siguientes cosas:
a) Se ejecuta el cdigo asociado al botn.
b) Inmediatamente despus, se cierra el cuadro de dilogo.
c) Se asigna a la propiedad DialogResult del cuadro de dilogo el valor de la
propiedad DialogResult del botn que se ha pulsado.
El cdigo del botn btnDefinirFrase del formulario principal es:
//Se crea un objeto de la clase del Cuadro de Dialogo
Dialogo dlg = new Dialogo();
//Cuando se cierre dlg se asigna a la propiedad DialogResult del
//formulario, la propiedad DialogResult del botn
//correspondiente al botn pulsado
dlg.ShowDialog(this);
//Si se pulsa btnOk
if(dlg.DialogResult == DialogResult.Ok)
// CodigoQueSeEjecutaDespuesDePulsarOk()
//si se pulsa btnCancelar
else if(dlg.DialogResult == DialogResult.Cancel)
// CodigoQueSeEjecutaDespuesDePulsarCancel()
MetodoQueHaceMasCosas();

DialogResult es una enumeracin pblica. Su definicin es:


public enum DialogResult;

Los valores que puede tomar DialogResult son:


DialogResult.Abort
DialogResult.Cancel
DialogResult.Ignore
DialogResult.No
DialogResult. OK
DialogResult.Retry
DialogResult.Yes
None

El mtodo ShowDialog() devuelve un objeto de tipo DialogResult que se asigna a la


propiedad DialogResult del cuadro de dilogo. Su estructura es:
public DialogResult ShowDialog();

Para construir esta aplicacin siga los siguientes pasos:

Comience creando una nueva aplicacin y llmele CuadroDeDialogo


Propiedades del formulario:
Text = Formulario Principal

3/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

Name = FormularioPrincipal

A continuacin aada dos botones al formulario principal. Asigne las propiedades


siguientes:
Name
Text
Name
Text

=
=
=
=

btnIrCuadroDialogo
Ir al cuadro de dialogo
btnSalir
Salir

Se aade una etiqueta con las propiedades siguientes:


Name = etiqueta
Text = (sin texto)

El resultado del diseo debe ser parecido al de la figura 18.2:

Figura 18.2. Diseo de la aplicacin

Este es un buen momento para guardar el proyecto.


A continuacin, cree el cuadro de dilogo:
a) Aada un formulario al proyecto (Proyecto/Agregar formulario de
Windows) o bien, en la ventana Explorador de Soluciones pulse
como indica la figura 18.3- con el botn derecho del ratn sobre el
nombre del proyecto, elegir Agregar/Agregar formulario de
Windows... , y asigne al fichero el nombre MiDialogo.cs (figuras
18.3 y 18.4)

4/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

Figura 18.3. Aadiendo un nuevo formulario a la aplicacin.

Figura 18.4. Cuadro de dilogo para configurar el nuevo formulario.

5/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

Al pulsar Abrir se aadir un nuevo formulario a la aplicacin.

b) En la ventana de propiedades del formulario MiDialogo:


BorderStyle = FixedDialog. (No puede cambiarse el tamao)
ControlBox = false (No aparece el botn control
)
MinimizeBox = false (No aparece el botn minimizar
)
MaximizeBox = false. (No aparece el botn maximizar
)
c) Aada una caja de texto al cuadro de dilogo:
Name = texto
Text = (sin texto)

d) Aada una etiqueta al cuadro de dilogo, para etiquetarlo:


Text = Escriba el fichero con su path completo
Autosize = True (optimiza su tamao automticamente)

e) Aada dos botones al cuadro de dilogo, btnOK y btnCancelar.


Cuando se pulse btnOK, se debe cerrar el cuadro de dilogo y el texto
de la caja de texto, debe ser recogido por el cuadro de dilogo y
enviado al formulario principal. Sin embargo, si se pulsa el botn
btnCancelar, simplemente se sale del cuadro de dilogo y se cancela
la operacin.
Propiedades de los botones:
Name = btnOK
Text = Aceptar
DialogResult = Ok
Name = btnCancelar
Text = Cancelar
DialogResult = cancel

El aspecto final del cuadro de dilogo es el de la figura 18.5:

Figura 18.5: Diseo final del cuadro de dilogo


f) La misin de los dos botones es cerrar el cuadro de dilogo y asignar
a la propiedad DialogResult del cuadro de dilogo el valor
correspondiente de la propiedad ModalResult del botn pulsadoen

6/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

este caso ModalResult.OK o ModalResult.Cancel- . Adems, esos


botones pueden ejecutar un cdigo, si se desea, antes de que se cierre
el cuadro. En este caso, el botn btnCancelar no ejecutar nada y el
btnOk asignar la cadena de la caja de texto a una variable privada de
la clase MiDialogo.
Para hacer esto de manera correcta, defina un campo privado
nombreFichero de tipo string, para almacenar o recoger el texto de la caja
de texto texto en la clase MiDialogo. Aada la lnea siguiente en la zona de
la clase MiDialogo reservada para los campos de la clase:
private string nombreFichero;

Para poder acceder a este campo de modo sencillo defina una propiedad
pblica, de nombre NombreFichero para leer y almacenar un string en el
campo nombreFichero.
Para ello, en la ventana Vista de clases pulse con botn derecho sobre el
nombre de la clase MiDialogo- y seleccione la opcin Agregar/Agregar
Propiedad, como se indica en la figura 18.6)

Figura 18.6. Forma de agregar visualmente una propiedad a una clase


Aparece el cuadro de dilogo de la figura 18.7:

7/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

Figura 18.7. Cuadro de dilogo de definicin de una propiedad.


Rellene los datos correspondientes: tipo devuelto ser un string- y el nombre
de la propiedad, que adems ser de lectura/escritura (figura 18.7). Visual Studio
escribe el cdigo siguiente:
public string NombreFichero
{
get
{
return nombreFichero;
}
set
{
nombreFichero = value;
}
}

El botn btnOk debe cerrar el cuadro, pero tambin asignar la cadena


introducida a la variable nombreFichero. Por eso, en su evento Click se le asocia el
cdigo siguiente:
NombreFichero=texto.Text;

Slo resta llamar al dilogo como modal desde el FormularioPrincipal y


asignar cdigo a los eventos Click de ambos botones:
MiDialogo dlg = new MiDialogo();
dlg.ShowDialog(this);

8/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

//Si se pulsa btnOk


if(dlg.DialogResult == DialogResult.OK)
etiqueta.Text = dlg.NombreFichero;
//si se pulsa btnCancelar
else if(dlg.DialogResult == DialogResult.Cancel)
// No hacer nada
;

Guarde la aplicacin y ejectela.

Figura 18.8. Aspecto final de la aplicacin.


El cdigo completo de los dos formularios es el siguiente:
//*************FormularioPrincipal.cs********************
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace CuadroDialogo
{
public class FormularioPrincipal : System.Windows.Forms.Form
{
private System.Windows.Forms.Button btnIrCuadroDialogo;
private System.Windows.Forms.Button btnSalir;
private System.Windows.Forms.Label etiqueta;
private System.ComponentModel.Container components = null;
public FormularioPrincipal()
{

9/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.btnSalir = new System.Windows.Forms.Button();
this.etiqueta = new System.Windows.Forms.Label();
this.btnIrCuadroDialogo = new Button();
this.SuspendLayout();
//
// btnSalir
//
this.btnSalir.Location = new Point(176, 152);
this.btnSalir.Name = "btnSalir";
this.btnSalir.TabIndex = 1;
this.btnSalir.Text = "Salir";
//
this.AutoScaleBaseSize = new Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.AddRange(new Control[] {
this.etiqueta,
this.btnSalir,
this.btnIrCuadroDialogo});
this.Name = "FormularioPrincipal";
this.Text = "Formulario Principal";
// etiqueta
//
this.etiqueta.Location = new Point(48, 72);
this.etiqueta.Name = "etiqueta";
this.etiqueta.Size=new System.Drawing.Size(184, 23);
this.etiqueta.TabIndex = 2;
//
// btnIrCuadroDialogo
//
this.btnIrCuadroDialogo.Location=new Point(32, 152);
this.btnIrCuadroDialogo.Name = "btnIrCuadroDialogo";
this.btnIrCuadroDialogo.Size = new Size(128, 23);
this.btnIrCuadroDialogo.TabIndex = 0;
this.btnIrCuadroDialogo.Text =
"Ir al cuadro de dilogo";
this.btnIrCuadroDialogo.Click +=
new
System.EventHandler(this.btnIrCuadroDialogo_Click);
//
// FormularioPrincipal

//
this.ResumeLayout(false);

10/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

}
#endregion
[STAThread]
static void Main()
{
Application.Run(new FormularioPrincipal());
}
private void btnIrCuadroDialogo_Click(object sender,
System.EventArgs e)
{
MiDialogo dlg = new MiDialogo();
dlg.ShowDialog(this);
//Si se pulsa btnOk
if(dlg.DialogResult == DialogResult.OK)
etiqueta.Text = dlg.NombreFichero;
//si se pulsa btnCancelar
else if(dlg.DialogResult == DialogResult.Cancel)
// No hacer nada
;
}
}
}

//***************MiDialogo.cs**************************
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace CuadroDialogo
{
public class MiDialogo : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox texto;
private System.Windows.Forms.Button btnOk;
private System.Windows.Forms.Button btnCancelar;
private System.Windows.Forms.Label label1;
private System.ComponentModel.Container components = null;
//Mis variables
private string nombreFichero;
public string NombreFichero
{
get
{
return nombreFichero;
}
set
{
nombreFichero=value;
}
}
public MiDialogo()
{

11/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.texto = new System.Windows.Forms.TextBox();
this.btnOk = new System.Windows.Forms.Button();
this.btnCancelar = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// texto
//
this.texto.Location=new System.Drawing.Point(56,56);
this.texto.Name = "texto";
this.texto.Size = new System.Drawing.Size(184, 20);
this.texto.TabIndex = 0;
this.texto.Text = "";
//
// btnOk
//
this.btnOk.DialogResult = DialogResult.OK;
this.btnOk.Location = new Point(56, 104);
this.btnOk.Name = "btnOk";
this.btnOk.TabIndex = 1;
this.btnOk.Text = "Ok";
this.btnOk.Click +=
new System.EventHandler(this.btnOk_Click);
//
// btnCancelar
//
this.btnCancelar.DialogResult = DialogResult.Cancel;
this.btnCancelar.Location = new Point(160, 104);
this.btnCancelar.Name = "btnCancelar";
this.btnCancelar.TabIndex = 2;
this.btnCancelar.Text = "Cancelar";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new Point(40, 24);
this.label1.Name = "label1";
this.label1.Size = new Size(201, 13);
this.label1.TabIndex = 3;
this.label1.Text =
Escriba el fichero con su path completo";
//
// MiDialogo
//
this.AutoScaleBaseSize = new Size(5, 13);

12/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

this.ClientSize = new Size(292, 157);


this.Controls.AddRange(new Control[] {
this.label1,
this.btnCancelar,
this.btnOk,
this.texto});
this.Name = "MiDialogo";
this.Text = "MiDialogo";
this.ResumeLayout(false);
}
#endregion
private void btnOk_Click(object sender, System.EventArgs e)
{
//Asignamos el valor introducido
//en la caja de texto al campo nombreFichero
//Podra escribirse tambin
// nombreFichero=texto.Text;
NombreFichero=texto.Text;
}
}
}

Por ltimo y aunque no se ha indicado, el cdigo correspondiente al botn btnSalir es:


private void btnSalir_Click(object sender, System.EventArgs e)
{
Application.Exit();
}

Cuadros de dialogo proporcionados por .NET


Todos los cuadros de dilogo que se estudian a continuacin son proporcionados por la
librera .NET. El programador no los disea. Slo define algunas de sus propiedades

La clase MessageBox
Presenta un cuadro de dilogo muy simple por pantalla. Un cuadro de dilogo
MessageBox es un cuadro de dilogo modal que, en general, se utiliza para informar o
avisar al usuario de algo que ha ocurrido pero no para introducir datos.
No tiene constructor pblico, por lo que no es posible crear un objeto o instancia de esta
clase. Para visualizar un MessageBox se invoca al mtodo esttico Show().
El aspecto de un MessageBox es el de la figura 18.9.

13/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

Figura 18.9
Se puede definir el ttulo, el mensaje, los botones e iconos del MessageBox
determinando los parmetros que se pasan en el mtodo Show().
Si, por ejemplo, en un formulario se ha situado un botn y una caja de texto y se desea
que si se pulsa el botn estando la caja de texto vaca, se avise al usuario con un
MessageBox que le indique que la caja de texto debe rellenarse con algn dato, el
cdigo del botn sera algo parecido al siguiente:
protected void button1_Click(object sender, System.EventArgs e)
{
if(textBox1.Text == "")
{
MessageBox.Show("Introduce tu nombre",
"Error al introducir el nombre,
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
}
else
{
// Cdigo en caso de que se haya introducido algo.
}
}

Esta clase hereda directamente de la clase Object y slo tiene un mtodo que no sea
heredado que es precisamente Show(). Devuelve el valor de la propiedad
DialogResult del botn pulsado.
Show() est sobrecargado y tiene muchas maneras de ser invocado:

Desde el simple:
public static DialogResult Show(string mensaje);

hasta
public static DialogResult Show(IWin32Window ventana,
string mensaje,
string titulo,
MessageBoxButtons botones,
MessageBoxIcon icono,
MessageBoxDefaultButton btn,
MessageBoxOptions op);

La enumeracin MessageBoxButtons es:


AbortRetryIgnore La ventana contiene los botones Anular, Reintentar y Omitir.
OK
La ventana contiene el boton Aceptar.
OKCancel
RetryCancel
YesNo

La ventana contiene los botones Aceptar y Cancelar.


La ventana contiene los botones Reintentar y Cancelar.
La ventana contiene los botones S, No

14/27

Marco Besteiro y Miguel Rodrguez


YesNoCancel

Cuadros de Dilogo

La ventana contiene los botones S, No y Cancelar.

La enumeracin MessageBoxIcon es:


Asterisk
Error
Exclamation
Hand
Information
None
Question
Stop
Warning

El icono es una interrogacin (una letra i en un signo de


interrogacin).
El icono es una X blanca sobre un cculo de fondo rojo
El icono es una exclamacin en un tringulo de fondo amarillo
El icono es una X blanca sobre un cculo de fondo rojo.
El icono es una interrogacin (una letra i en un signo de
interrogacin).
No hay icono.
El icono es una interrogacin en un crculo.
El icono es una X blanca sobre un cculo de fondo rojo.
El icono es una exclamacin en un tringulo de fondo amarillo.

Enumeracin correspondiente a MessageBoxDefaultButton


Button1
Button2
Button3

El botn por defecto es el primero.


Idem el segundo.
Idem el tercero.

Enumeracin correspondiente a MessageBoxOptions


DefaultDesktopOnly,
ServiceNotification

Se visualiza el mensaje en la ventana activa.

RightAlign, RtlReading

Formas de alinear el texto

A continuacin se destacan varios ejemplos y se representa la salida de esas


lneas de cdigo.
a) MessageBox.Show(this,"Hola");
b) MessageBox.Show("Hola");

Figura 18.10

15/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

b) MessageBox.Show(this,"Hola","Este es el ttulo del mensaje");

Figura 18.11
c) MessageBox.Show(this,"Hola","Ttulo mensaje",MessageBoxButtons.OK);

Figura 18.12
c) MessageBox.Show(this,
"Hola",
"Ttulo mensaje",
MessageBoxButtons.YesNoCancel);

Figura 18.13
d) MessageBox.Show(this,
"Hola",
"Ttulo mensaje",
MessageBoxButtons.AbortRetryIgnore);

Figura 18.14
e) MessageBox.Show(this,

16/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

"Hola",
"Ttulo mensaje",
MessageBoxButtons.AbortRetryIgnore,
MessageBoxIcon.Asterisk);

Figura 18.15
f) MessageBox.Show(this,
"Hola",
"Ttulo mensaje",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Stop,
MessageBoxDefaultButton.Button2);

Figura 18.16

Cuadros de dilogo estndar proporcionados por .NET


El Framework .NET proporciona otras clases para algunos cuadros de dilogo
predefinidos para abrir y guardar ficheros, imprimir, para la elegir de la fuente, etc.
Cada uno de estos cuadros de dilogo se corresponde con una clase del Framework. La
jerarqua de dichas clases es la que se representa en la figura 18.17.

Object

Component

17/27
CommonDialog

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

Figura 18.17. Jerarqua de las clases correspondientes a los cuadros de dilogo estndar.
Todas estas clases derivan de la clase CommonDialog, excepto la clase
PrintPreviewDialog que deriva directamente de la clase Form.

La clase CommonDialog
Esta clase base define los siguientes mtodos y eventos, que son comunes a todas las
clases que derivan de ella (Figura 18.17). Los ms importantes son:
DialogResult
ShowDialog()
void Reset()
EventHandler
HelpRequest

Este mtodo despliega el cuadro de dilogo


Pone los valores predeterminados.
Este evento se lanza cuando el usuario pulsa el botn de
ayuda en el cuadro de dilogo

El mtodo ms importante de CommonDialog es ShowDialog() que devuelve un objeto


de tipo DialogResult que en estos cuadros de dilogo puede tomar dos valores:
DialogResult.OK si el usuario pulsa el botn Ok en el cuadro de dilogo.
DialogResult.CANCEL, en cualquier otro caso.

Cmo utilizar los cuadros de dilogo estndar


En general, todas las clases que corresponden a cuadros de dilogo estndar son muy
parecidas. Para presentar en pantalla el cuadro de dilogo se invoca el mtodo
ShowDialog() y ste, a su vez, invoca al mtodo RunDialog(). Una vez que se ha
cerrado el cuadro, ShowDialog() devuelve un objeto de tipo DialogResult que
encapsula la informacin acerca de cmo el usuario ha interactuiado con la caja de
dilogo.
18/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

En general, los pasos a seguir para utilizar un cuadro de dilogo estndar son:

Crear una instancia del cuadro de dilogo.


Definir las propiedades y estado del cuadro de dilogo. Este paso puede
tambin hacerse en tiempo de diseo.
Llamar al mtodo ShowDialog() y esperar la actuacin del usuario.

Suponga, por ejemplo que se desea llamar al cuadro de dilogo correspondiente a abrir
un fichero. Despus de haber realizado los tres pasos anteriores, el usuario selecciona un
fichero y pulsa el botn OK. Se asocia a la propiedad FileName el nombre del fichero
que se ha selecionado, se cierra el cuadro y se chequea si el valor devuelto por el
mtodo ShowDialog() es DialogResult.Ok. Despus se leen las propiedades que se
necesiten del cuadro de dilogo. El cdigo podra ser:
string nombreFichero;
OpenFileDialog dlg=new OpenFileDialog();
dlg.Title= "Cuadro de dialogo Abrir";
if(dlg.ShowDialog()==DialogResult.OK)
nombreFichero = dlg.FileName;
else
//OtroMetodo();

Realmente, para abrir el cuadro de dilogo, slo son necesarias estas dos lneas de
cdigo:
OpenFileDialog dlg=new OpenFileDialog();
dlg.ShowDialog();

Observe que el cuadro de dilogo slo selecciona el fichero y no lo abre. Para ello. el
programador debe escribir un determinado cdigo.
El resto de los cuadros de dialogo estndar funcionan de una manera muy parecida pero
cada uno de ellos tiene una funcionalidad especfica y pueden seleccionar de manera
visual un fichero, una fuente, un color, etc... y lo asignan a la propiedad
correspondiente.
Si se ejecuta el cdigo anterior, por ejemplo, desde un botn, se despliega en la pantalla
el formulario de la figura 18.18:

19/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

Figura 18.18. Cuadro de dilogo estndar para abrir ficheros.


A continuacin, se estudian con cierto detalle algunas de las clases correspondientes a
los distintos cuadros de dilogo.

La clase FileDialog
FileDialog es una clase abstracta y no puede ser instanciada directamente. De esta
clase heredan las clases OpenFileDialog y SaveFileDialog.
FileDialog es un cuadro de dilogo modal.

Propiedades
bool AddExtension
bool CheckFileExists
bool CheckPathExists
string DefaultExt

string FileName
string[] FileNames
string

Filter

Indica si se aade una extensin de un tipo de fichero si el


usuario omite la extensin.
Indica si se presenta un cuadro de dilogo de aviso si el
usuario especifica un nombre de fichero que no existe.
Indica si se presenta un cuadro de dilogo de aviso si el
usuario especifica un path que no existe.
La extensin por defecto. Por defecto, si no se ha
especificado ninguna, se aade esta extensin a los
ficheros cuando el usuario guarda el fichero.
Es un string con el nombre del fichero seleccionado en el
cuadro de dilogo.
Obtiene todos los ficheros seleccionados en el cuadro de
dilogo.
Determina el filtro que determina los tipos de ficheros
que aparecen en las cajas de texto Guardar como tipo

20/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

o Tipo de archivo.
El ndice del filtro actualmente seleccionado. El primer
ndice es el 1.
string InitialDirectory Directorio inicial al abrirse el cuadro de dilogo.
bool RestoreDirectory
Especifica si se restaura los valores del cuadro de dilogo
antes de cerrarlo.
bool ShowHelp
Indica si se despliega el botn Help en el cuadro de
dilogo.
string Title
Ttulo del cuadro de dilogo.
int FilterIndex

Eventos
CancelEventhandler FileOk

Ocurre cuando el usuario pulsa el botn Abrir o


Guardar del cuadro de dilogo.

Las clases OpenFileDialog y SaveFileDialog


El objetivo final de estos controles es proporcionar el nombre de un fichero de forma
segura y visual. El nombre del archivo viene especificado en la propiedad FileName del
dilogo.
Representan dos cuadros de dilogo que presentan en pantalla controles que permiten
seleccionar un fichero, abrirlo o salvarlo chequeando si el fichero existe o no. La
propiedad ShowReadOnly determina si aparece un CheckBox en el cuadro para indicar
la opcin de slo lectura. La propiedad ReadOnlyChecked indica el estado del
CheckBox de slo lectura.
Ambas clases tienen miembros muy parecidos, por lo que se estudiarn juntas. La
mayor parte de la funcionalidad de estas clases la proporciona la clase FileDialog. A
continuacin se estudian los miembros de FileDialog.
Propiedades
bool Multiselect
bool ReadOnlyChecked
bool ShowReadOnly

Indica si puede hacerse una seleccin mltiple o no.


Indica si el CheckBox est seleccionado o no.
Indica si el cuadro de dilogo contiene una opcin un
CheckBox- de slo lectura.

Mtodos
Stream OpenFile()

Abre el fichero especificado en la propiedad FileName


seleccionado por el usuario con permiso de slo lectura.

Por ejemplo, ste poda ser un cdigo para este control:


Stream miStream;
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.InitialDirectory = "c:\\" ;

21/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

openDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"


;
openDialog.FilterIndex = 2 ;
openDialog.RestoreDirectory = true ;
if(openDialog.ShowDialog() == DialogResult.OK)
{
if((miStream = openDialog.OpenFile())!= null)
{
// Cdigo para leer el Stream.
miStream.Close();
}
}

Las dos siguientes propiedades son especficas de la clase SaveFileDialog.


bool CreatePrompt
bool OverwritePrompt

Indica si el usuario puede crear un fichero que no existe.


Indica si el cuadro de dilogo Guardar como despliega un
aviso especificando el fichero que ya existe.

La clase ColorDialog
Esta clase se utiliza para seleccionar un color mediante un cuadro de dilogo. Su
aspecto es el de la figura 18.19.

Figura 18.19. Cuadro de dialogo Color


Propiedades.
bool AllowFullOpen

Indica si el usuario puede utilizar el cuadro de dilogo para


definir colores personalizados.

22/27

Marco Besteiro y Miguel Rodrguez


bool AnyColor
Color Color
bool CustomColors
bool FullOpen
bool ShowHelp

Cuadros de Dilogo

Indica si el cuadro de dilogo presenta todos los colores


disponibles del juego bsico de colores.
Color actual o color seleccionado por el usuario.
Indica si se pueden definir colores personalizados.
Indica si se ensea el cuadro de dilogo completo, es decir,
con la parte de los colores personalizados.
Indica si hay botn de ayuda en el cuadro de dilogo.

La clase FontDialog
Esta clase se utiliza para la seleccin de una fuente. Su aspecto es el de la figura 20.

Figura 18.20. Cuadro de dilogo Fuente


Propiedades
Color Color

Indica el color de la fuente seleccionada.


Indica la fuente actual o la fuente seleccionada por el usuario.
int MaxSize
Indica el valor de tamao mximo de la fuente.
int MinSize
Idem, mnimo.
bool ShowApply
Indica si el cuadro de dilogo tiene botn Aplicar.
bool ShowColor
Indica si el cuadro de dilogo proporciona la opcin de color de la
letra.
bool ShowEffects Indica si el cuadro de dilogo contiene controles que permitan
especificar las caractersticas de tachado, subrayado y color del
texto.
bool ShowHelp
Indica si se presenta en el cuadro de dilogo un botn de ayuda.
Font Font

23/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

Ejemplo: trabajando con cuadros de dilogo estndar y el control


RichTextBox: Un sencillo editor de textos.
A continuacin se implementa un sencillo editor de textos con una serie de mens que
permite cambiar la fuente y el color, as como abrir y salvar ficheros de texto. Se utiliza
un control que no ha sido estudiado, RichTextBox, que es una caja de texto
enriquecido. Dicho control tiene dos mtodos para leer y guardar un fichero en formato
RTF o de texto La estructura de estos dos mtodos es la siguiente:
public void LoadFile(string nombreDelFichero);
public void SaveFile(string nombreDelFichero);

El aspecto final de la aplicacin es el de la figura 21.


Los pasos necesarios para implementar la aplicacin son los siguientes:
a) Cree un nuevo proyecto y llmelo ProyectoDialogosEstandar.
b) Cambie el nombre del fichero Form1.cs a ProcesadorDeTextos.cs.
c) Cambie las siguientes propiedades del formulario:
Name: ProcesadorDeTextos
Text: Procesador de Textos

Cambie la lnea del mtodo Main()


Application.Run(new Form1());

por la lnea:
Application.Run(new ProcesadorDeTextos());

OJO con esto que puede ser slo para la versin beta
d) Site un control RichTextBox en el formulario con las siguientes propiedades:
Name: texto
Text: (Vaco)
Dock: Fill

Con esta ltima propiedad se asegura que siempre que se redimensione la


ventana del formulario tambin se redimensiona la superficie del control para ocupar
toda la superficie del formulario.
e) Aada un control MainMenu al formulario con las propiedades siguientes:
Name: menu
Opciones de Menu:

Disee el men con dos opciones principales, Archivo y Formato y en cada una
de ellas las siguienetes opciones de men:
Menu

Propiedades
24/27

Propiedad Text

Marco Besteiro y Miguel Rodrguez


Archivo
Nuevo
Abrir
Guardar
- (Signo -)
Salir
Formato
Fuente
Color de fondo

Cuadros de Dilogo

mArchivo
mNuevo
mAbrir
mGuardar
mSeparador
mSalir
mFormato
mFuente
mColorFondo

Archivo
Nuevo
Abrir
Guardar
Salir
Formato
Fuente
Color de fondo

f) Aada los cuatro controles siguientes con las propiedades que se indican:

OpenFileDialog

Name: dlgAbrir
Filter: Documentos de text (*.txt)|*.txt|Todos (*.*)|*.*
Default Ext: txt
ShowHelp: True
ShowReadOnly: False
Title: Dilogo Abrir fichero

SaveFileDialog

Name: dlgGuardar
AddExtension: true
Filter: Documentos de text (*.txt)|*.txt|Todos (*.*)|*.*
FileName: doc1
Default Ext: txt
RestoreDirectory: False
ShowHelp: True
Title: Dilogo Guardar fichero

ColorDialog

Name: dlgColor
AllowFullOpen: True
FullOpen: False
ShowHelp: True
SolidColorOnly: False

FontDialog

Name: dlgFuente
ShowApply: True
ShowColor: True
ShowEffects: True
ShowHelp: True

25/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

Figura 18.21. Editor de textos


g) Cree un miembro privado, denominado nombreFichero de tipo string, e
incielo en el constructor del formulario de la siguiente manera:
//miembro
private string nombreFichero;
//constructor
public ProcesadorDeTextos()
{
InitializeComponent();
nombreFichero="Sintitulo";
this.Text=nombreFichero;
}

h) Escriba, para cada una de las opciones de men, el siguiente cdigo:

Men Nuevo:
private void mNuevo_Click(object sender, System.EventArgs e)
{
nombreFichero="Sintitulo";
texto.Clear();
this.Text=nombreFichero;
}

Men Abrir:
private void mAbrir_Click(object sender, System.EventArgs e)
{
if(dlgAbrir.ShowDialog() == DialogResult.OK){
nombreFichero=dlgAbrir.FileName;
texto.LoadFile(nombreFichero);
this.Text=nombreFichero;
}
}

Men Guardar
private void mGuardar_Click(object sender, System.EventArgs e)
{
if(dlgGuardar.ShowDialog() == DialogResult.OK)

26/27

Marco Besteiro y Miguel Rodrguez

Cuadros de Dilogo

{
nombreFichero=dlgAbrir.FileName;
texto.SaveFile(nombreFichero);
this.Text=nombreFichero;
}
}

Men Salir
private void mSalir_Click(object sender, System.EventArgs e)
{
Application.Exit();
}

Men Fuente
private void mFuente_Click(object sender, System.EventArgs e)
{
if(dlgFuente.ShowDialog() == DialogResult.OK)
{
texto.Font=dlgFuente.Font;
texto.ForeColor=dlgFuente.Color;
}
}

Men Color de Fondo:


private void mColorFondo_Click(object sender, System.EventArgs e)
{
if(dlgColor.ShowDialog() == DialogResult.OK)
texto.BackColor=dlgColor.Color;
}

Guarde, compile y ejecute la aplicacin. Compruebe las distintas posibilidades del


programa. Observe que en el ttulo de la aplicacin se escribe el nombre completo
del fichero (Figura 18.21).

27/27

También podría gustarte