Sunteți pe pagina 1din 0

Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

1/27
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 Di al og o Di al ogBox. Las cajas de dilogo son formularios
con unas propiedades predeterminadas:
a) Tiene tamao fijo. La propiedad For mBor der St yl e debe ser Fi xedDi al og.
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 Mi ni mi zedBox, Maxi mi zedBox y Cont r ol Box deben ser f al se.

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 Acept ar y un botn Cancel ar ,
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
ShowDi al og( ) . 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:

Di al ogo dl g = new Di al ogo( ) ;
dl g. ShowDi al og( ) ;
Met odoQueHaceAl go( ) ;

En este ejemplo, el mtodo Met odoQueHaceAl go( ) 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 ShowDi al og( ) . Se abre entonces el cuadro de dilogo y se ejecutara el mtodo
Met odoQueHaceAl go( ) sin esperar a que se cierre el cuadro. El control de este tipo de
cuadros es mucho ms complejo.

Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

2/27
Ejemplo: trabajando con cuadros de dilogo definidos por el usuario
Esta aplicacin tiene un formulario llamado For mul ar i oPr i nci pal , y un cuadro de
dilogo modal. El For mul ar i oPr i nci pal 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 For mul ar i oPr i nci pal tiene una etiqueta para recoger la cadena desde el
cuadro de dialogo y dos botones bt nDef i ni r Fr ase y bt nSal i r . El cuadro de dilogo
Di al ogo tiene una caja de texto t ext o y dos botones bt nOk y bt nCancel ar .
For mul ar i oPr i nci pal llama al cuadro de dilogo desde bt nDef i ni r Fr ase.



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 bt nOk, la cadena de la caja de texto debe pasar a la etiqueta
del For mul ar i oPr i nci pal . Si se pulsase bt nCancel ar , se debe cancelar la operacin.

El botn bt nOk 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
bt nCancel ar : 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 Di al ogResul t de los botones bt nOk y bt nCancel ar . Se le asigna el valor
Di al ogResul t . Ok al primero y Di al ogResul t . Cancel al segundo.

Pero, qu significa exactamente asignar un valor a la propiedad Di al ogResul t de un
botn?.
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

3/27

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 Di al ogResul t del cuadro de dilogo el valor de la
propiedad Di al ogResul t del botn que se ha pulsado.

El cdigo del botn bt nDef i ni r Fr ase del formulario principal es:

/ / Se cr ea un obj et o de l a cl ase del Cuadr o de Di al ogo
Di al ogo dl g = new Di al ogo( ) ;

/ / Cuando se ci er r e dl g se asi gna a l a pr opi edad Di al ogResul t del
/ / f or mul ar i o, l a pr opi edad Di al ogResul t del bot n
/ / cor r espondi ent e al bot n pul sado
dl g. ShowDi al og( t hi s) ;

/ / Si se pul sa bt nOk
i f ( dl g. Di al ogResul t == Di al ogResul t . Ok)
/ / Codi goQueSeEj ecut aDespuesDePul sar Ok( )

/ / si se pul sa bt nCancel ar
el se i f ( dl g. Di al ogResul t == Di al ogResul t . Cancel )
/ / Codi goQueSeEj ecut aDespuesDePul sar Cancel ( )

Met odoQueHaceMasCosas( ) ;


Di al ogResul t es una enumeracin pblica. Su definicin es:

publ i c enumDi al ogResul t ;

Los valores que puede tomar Di al ogResul t son:

Di al ogResul t . Abor t
Di al ogResul t . Cancel
Di al ogResul t . I gnor e
Di al ogResul t . No
Di al ogResul t . OK
Di al ogResul t . Ret r y
Di al ogResul t . Yes
None

El mtodo ShowDi al og( ) devuelve un objeto de tipo Di al ogResul t que se asigna a la
propiedad Di al ogResul t del cuadro de dilogo. Su estructura es:

publ i c Di al ogResul t ShowDi al og( ) ;

Para construir esta aplicacin siga los siguientes pasos:

Comience creando una nueva aplicacin y llmele Cuadr oDeDi al ogo
Propiedades del formulario:
Text = For mul ar i o Pr i nci pal
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

4/27
Name = For mul ar i oPr i nci pal
A continuacin aada dos botones al formulario principal. Asigne las propiedades
siguientes:
Name = bt nI r Cuadr oDi al ogo
Text = I r al cuadr o de di al ogo
Name = bt nSal i r
Text = Sal i r

Se aade una etiqueta con las propiedades siguientes:
Name = et i quet a
Text = ( si n t ext o)

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 Mi Di al ogo. cs (figuras
18.3 y 18.4)

Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

5/27


Figura 18.3. Aadiendo un nuevo formulario a la aplicacin.



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

Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

6/27
Al pulsar Abr i r se aadir un nuevo formulario a la aplicacin.


b) En la ventana de propiedades del formulario Mi Di al ogo:
Bor der St yl e = Fi xedDi al og. (No puede cambiarse el tamao)
Cont r ol Box = f al se (No aparece el botn control )
Mi ni mi zeBox = f al se (No aparece el botn minimizar )
Maxi mi zeBox = f al se. (No aparece el botn maximizar )

c) Aada una caja de texto al cuadro de dilogo:
Name = t ext o
Text = ( si n t ext o)

d) Aada una etiqueta al cuadro de dilogo, para etiquetarlo:
Text = Escr i ba el f i cher o con su pat h compl et o
Aut osi ze = Tr ue ( opt i mi za su t amao aut omt i cament e)

e) Aada dos botones al cuadro de dilogo, bt nOK y bt nCancel ar .
Cuando se pulse bt nOK, 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
bt nCancel ar , simplemente se sale del cuadro de dilogo y se cancela
la operacin.

Propiedades de los botones:

Name = bt nOK
Text = Acept ar
Di al ogResul t = Ok

Name = bt nCancel ar
Text = Cancel ar
Di al ogResul t = 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 Di al ogResul t del cuadro de dilogo el valor
correspondiente de la propiedad Modal Resul t del botn pulsadoen
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

7/27
este caso Modal Resul t . OK o Modal Resul t . Cancel - . Adems, esos
botones pueden ejecutar un cdigo, si se desea, antes de que se cierre
el cuadro. En este caso, el botn bt nCancel ar no ejecutar nada y el
bt nOk asignar la cadena de la caja de texto a una variable privada de
la clase Mi Di al ogo.

Para hacer esto de manera correcta, defina un campo privado
nombr eFi cher o de tipo st r i ng, para almacenar o recoger el texto de la caja
de texto t ext o en la clase Mi Di al ogo. Aada la lnea siguiente en la zona de
la clase Mi Di al ogo reservada para los campos de la clase:

pr i vat e st r i ng nombr eFi cher o;

Para poder acceder a este campo de modo sencillo defina una propiedad
pblica, de nombre Nombr eFi cher o para leer y almacenar un st r i ng en el
campo nombr eFi cher o.

Para ello, en la ventana Vista de clases pulse con botn derecho sobre el
nombre de la clase Mi Di al ogo- 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:


Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

8/27

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

Rellene los datos correspondientes: tipo devuelto ser un st r i ng- y el nombre
de la propiedad, que adems ser de lectura/escritura (figura 18.7). Visual Studio
escribe el cdigo siguiente:

publ i c st r i ng Nombr eFi cher o
{
get
{
r et ur n nombr eFi cher o;
}
set
{
nombr eFi cher o = val ue;
}
}

El botn bt nOk debe cerrar el cuadro, pero tambin asignar la cadena
introducida a la variable nombr eFi cher o. Por eso, en su evento Cl i ck se le asocia el
cdigo siguiente:

Nombr eFi cher o=t ext o. Text ;

Slo resta llamar al dilogo como modal desde el For mul ar i oPr i nci pal y
asignar cdigo a los eventos Cl i ck de ambos botones:

Mi Di al ogo dl g = new Mi Di al ogo( ) ;
dl g. ShowDi al og( t hi s) ;

Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

9/27
/ / Si se pul sa bt nOk
i f ( dl g. Di al ogResul t == Di al ogResul t . OK)
et i quet a. Text = dl g. Nombr eFi cher o;
/ / si se pul sa bt nCancel ar
el se i f ( dl g. Di al ogResul t == Di al ogResul t . 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:

/ / *************For mul ar i oPr i nci pal . cs********************
usi ng Syst em;
usi ng Syst em. Dr awi ng;
usi ng Syst em. Col l ect i ons;
usi ng Syst em. Component Model ;
usi ng Syst em. Wi ndows. For ms;
usi ng Syst em. Dat a;

namespace Cuadr oDi al ogo
{
publ i c cl ass For mul ar i oPr i nci pal : Syst em. Wi ndows. For ms. For m
{
pr i vat e Syst em. Wi ndows. For ms. But t on bt nI r Cuadr oDi al ogo;
pr i vat e Syst em. Wi ndows. For ms. But t on bt nSal i r ;
pr i vat e Syst em. Wi ndows. For ms. Label et i quet a;
pr i vat e Syst em. Component Model . Cont ai ner component s = nul l ;

publ i c For mul ar i oPr i nci pal ( )
{
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

10/27
I ni t i al i zeComponent ( ) ;
}

pr ot ect ed over r i de voi d Di spose( bool di sposi ng )
{
i f ( di sposi ng )
{
i f ( component s ! = nul l )
{
component s. Di spose( ) ;
}
}
base. Di spose( di sposi ng ) ;
}

#r egi on Wi ndows For mDesi gner gener at ed code
pr i vat e voi d I ni t i al i zeComponent ( )
{
t hi s. bt nSal i r = new Syst em. Wi ndows. For ms. But t on( ) ;
t hi s. et i quet a = new Syst em. Wi ndows. For ms. Label ( ) ;
t hi s. bt nI r Cuadr oDi al ogo = new But t on( ) ;
t hi s. SuspendLayout ( ) ;
/ /
/ / bt nSal i r
/ /
t hi s. bt nSal i r . Locat i on = new Poi nt ( 176, 152) ;
t hi s. bt nSal i r . Name = " bt nSal i r " ;
t hi s. bt nSal i r . TabI ndex = 1;
t hi s. bt nSal i r . Text = " Sal i r " ;
/ /

t hi s. Aut oScal eBaseSi ze = new Si ze( 5, 13) ;
t hi s. Cl i ent Si ze = new Syst em. Dr awi ng. Si ze( 292, 273) ;
t hi s. Cont r ol s. AddRange( new Cont r ol [ ] {
t hi s. et i quet a,
t hi s. bt nSal i r ,
t hi s. bt nI r Cuadr oDi al ogo}) ;
t hi s. Name = " For mul ar i oPr i nci pal " ;
t hi s. Text = " For mul ar i o Pr i nci pal " ; / / et i quet a
/ /
t hi s. et i quet a. Locat i on = new Poi nt ( 48, 72) ;
t hi s. et i quet a. Name = " et i quet a" ;
t hi s. et i quet a. Si ze=new Syst em. Dr awi ng. Si ze( 184, 23) ;
t hi s. et i quet a. TabI ndex = 2;
/ /
/ / bt nI r Cuadr oDi al ogo
/ /
t hi s. bt nI r Cuadr oDi al ogo. Locat i on=new Poi nt ( 32, 152) ;
t hi s. bt nI r Cuadr oDi al ogo. Name = " bt nI r Cuadr oDi al ogo" ;
t hi s. bt nI r Cuadr oDi al ogo. Si ze = new Si ze( 128, 23) ;
t hi s. bt nI r Cuadr oDi al ogo. TabI ndex = 0;
t hi s. bt nI r Cuadr oDi al ogo. Text =
" I r al cuadr o de di l ogo" ;
t hi s. bt nI r Cuadr oDi al ogo. Cl i ck +=
new
Syst em. Event Handl er ( t hi s. bt nI r Cuadr oDi al ogo_Cl i ck) ;
/ /
/ / For mul ar i oPr i nci pal
//
t hi s. ResumeLayout ( f al se) ;

Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

11/27
}
#endr egi on

[ STAThr ead]
st at i c voi d Mai n( )
{
Appl i cat i on. Run( new For mul ar i oPr i nci pal ( ) ) ;
}

pr i vat e voi d bt nI r Cuadr oDi al ogo_Cl i ck( obj ect sender ,
Syst em. Event Ar gs e)
{
Mi Di al ogo dl g = new Mi Di al ogo( ) ;
dl g. ShowDi al og( t hi s) ;

/ / Si se pul sa bt nOk
i f ( dl g. Di al ogResul t == Di al ogResul t . OK)
et i quet a. Text = dl g. Nombr eFi cher o;
/ / si se pul sa bt nCancel ar
el se i f ( dl g. Di al ogResul t == Di al ogResul t . Cancel )
/ / No hacer nada
;

}
}
}


/ / ***************Mi Di al ogo. cs**************************
usi ng Syst em;
usi ng Syst em. Dr awi ng;
usi ng Syst em. Col l ect i ons;
usi ng Syst em. Component Model ;
usi ng Syst em. Wi ndows. For ms;

namespace Cuadr oDi al ogo
{
publ i c cl ass Mi Di al ogo : Syst em. Wi ndows. For ms. For m
{
pr i vat e Syst em. Wi ndows. For ms. Text Box t ext o;
pr i vat e Syst em. Wi ndows. For ms. But t on bt nOk;
pr i vat e Syst em. Wi ndows. For ms. But t on bt nCancel ar ;
pr i vat e Syst em. Wi ndows. For ms. Label l abel 1;

pr i vat e Syst em. Component Model . Cont ai ner component s = nul l ;

/ / Mi s var i abl es
private string nombreFichero;
public string NombreFichero
{
get
{
return nombreFichero;
}
set
{
nombreFichero=value;
}
}
publ i c Mi Di al ogo( )
{
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

12/27
I ni t i al i zeComponent ( ) ;
}
pr ot ect ed over r i de voi d Di spose( bool di sposi ng )
{
i f ( di sposi ng )
{
i f ( component s ! = nul l )
{
component s. Di spose( ) ;
}
}
base. Di spose( di sposi ng ) ;
}
#r egi on Wi ndows For mDesi gner gener at ed code
pr i vat e voi d I ni t i al i zeComponent ( )
{
t hi s. t ext o = new Syst em. Wi ndows. For ms. Text Box( ) ;
t hi s. bt nOk = new Syst em. Wi ndows. For ms. But t on( ) ;
t hi s. bt nCancel ar = new Syst em. Wi ndows. For ms. But t on( ) ;
t hi s. l abel 1 = new Syst em. Wi ndows. For ms. Label ( ) ;
t hi s. SuspendLayout ( ) ;
/ /
/ / t ext o
/ /
t hi s. t ext o. Locat i on=new Syst em. Dr awi ng. Poi nt ( 56, 56) ;
t hi s. t ext o. Name = " t ext o" ;
t hi s. t ext o. Si ze = new Syst em. Dr awi ng. Si ze( 184, 20) ;
t hi s. t ext o. TabI ndex = 0;
t hi s. t ext o. Text = " " ;
/ /
/ / bt nOk
/ /
t hi s. bt nOk. Di al ogResul t = Di al ogResul t . OK;
t hi s. bt nOk. Locat i on = new Poi nt ( 56, 104) ;
t hi s. bt nOk. Name = " bt nOk" ;
t hi s. bt nOk. TabI ndex = 1;
t hi s. bt nOk. Text = " Ok" ;
t hi s. bt nOk. Cl i ck +=
new Syst em. Event Handl er ( t hi s. bt nOk_Cl i ck) ;
/ /
/ / bt nCancel ar
/ /
t hi s. bt nCancel ar . Di al ogResul t = Di al ogResul t . Cancel ;
t hi s. bt nCancel ar . Locat i on = new Poi nt ( 160, 104) ;
t hi s. bt nCancel ar . Name = " bt nCancel ar " ;
t hi s. bt nCancel ar . TabI ndex = 2;
t hi s. bt nCancel ar . Text = " Cancel ar " ;
/ /
/ / l abel 1
/ /
t hi s. l abel 1. Aut oSi ze = t r ue;
t hi s. l abel 1. Locat i on = new Poi nt ( 40, 24) ;
t hi s. l abel 1. Name = " l abel 1" ;
t hi s. l abel 1. Si ze = new Si ze( 201, 13) ;
t hi s. l abel 1. TabI ndex = 3;
t hi s. l abel 1. Text =
Escr i ba el f i cher o con su pat h compl et o" ;
/ /
/ / Mi Di al ogo
/ /
t hi s. Aut oScal eBaseSi ze = new Si ze( 5, 13) ;
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

13/27
t hi s. Cl i ent Si ze = new Si ze( 292, 157) ;
t hi s. Cont r ol s. AddRange( new Cont r ol [ ] {
t hi s. l abel 1,
t hi s. bt nCancel ar ,
t hi s. bt nOk,
t hi s. t ext o}) ;
t hi s. Name = " Mi Di al ogo" ;
t hi s. Text = " Mi Di al ogo" ;
t hi s. ResumeLayout ( f al se) ;

}
#endr egi on

pr i vat e voi d bt nOk_Cl i ck( obj ect sender , Syst em. Event Ar gs e)
{
/ / Asi gnamos el val or i nt r oduci do
/ / en l a caj a de t ext o al campo nombr eFi cher o
/ / Podr a escr i bi r se t ambi n
/ / nombr eFi cher o=t ext o. Text ;
Nombr eFi cher o=t ext o. Text ;
}
}
}


Por ltimo y aunque no se ha indicado, el cdigo correspondiente al botn bt nSal i r es:

pr i vat e voi d bt nSal i r _Cl i ck( obj ect sender , Syst em. Event Ar gs e)
{
Appl i cat i on. Exi t ( ) ;
}

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.

Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

14/27
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:

pr ot ect ed voi d but t on1_Cl i ck( obj ect sender , Syst em. Event Ar gs e)
{
i f ( t ext Box1. Text == " " )
{
MessageBox. Show( " I nt r oduce t u nombr e" ,
" Er r or al i nt r oduci r el nombr e,
MessageBoxBut t ons. OK,
MessageBoxI con. Excl amat i on) ;
}
el se
{
/ / Cdi go en caso de que se haya i nt r oduci do al go.
}
}


Esta clase hereda directamente de la clase Obj ect y slo tiene un mtodo que no sea
heredado que es precisamente Show( ) . Devuelve el valor de la propiedad
Di al ogResul t del botn pulsado.

Show( ) est sobrecargado y tiene muchas maneras de ser invocado:

Desde el simple:
publ i c st at i c Di al ogResul t Show( st r i ng mensaj e) ;
hasta
publ i c st at i c Di al ogResul t Show( I Wi n32Wi ndow vent ana,
st r i ng mensaj e,
st r i ng t i t ul o,
MessageBoxBut t ons bot ones,
MessageBoxI con i cono,
MessageBoxDef aul t But t on bt n,
MessageBoxOpt i ons op) ;
La enumeracin MessageBoxBut t ons es:
Abor t Ret r yI gnor e
La ventana contiene los botones Anul ar , Rei nt ent ar y Omi t i r .
OK
La ventana contiene el boton Acept ar .
OKCancel
La ventana contiene los botones Acept ar y Cancel ar .
Ret r yCancel
La ventana contiene los botones Rei nt ent ar y Cancel ar .
YesNo
La ventana contiene los botones S, No
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

15/27
YesNoCancel
La ventana contiene los botones S , No y Cancel ar .
La enumeracin MessageBoxI con es:
Ast er i sk
El icono es una interrogacin (una letra i en un signo de
interrogacin).
Er r or
El icono es una X blanca sobre un cculo de fondo rojo
Excl amat i on
El icono es una exclamacin en un tringulo de fondo amarillo
Hand
El icono es una X blanca sobre un cculo de fondo rojo.
I nf or mat i on
El icono es una interrogacin (una letra i en un signo de
interrogacin).
None
No hay icono.
Quest i on
El icono es una interrogacin en un crculo.
St op
El icono es una X blanca sobre un cculo de fondo rojo.
War ni ng
El icono es una exclamacin en un tringulo de fondo amarillo.

Enumeracin correspondiente a MessageBoxDef aul t But t on
But t on1
El botn por defecto es el primero.
But t on2
Idem el segundo.
But t on3
Idem el tercero.


Enumeracin correspondiente a MessageBoxOptions

Def aul t Deskt opOnl y,
Ser vi ceNot i f i cat i on
Se visualiza el mensaje en la ventana activa.
Ri ght Al i gn, Rt l Readi ng
Formas de alinear el texto

A continuacin se destacan varios ejemplos y se representa la salida de esas
lneas de cdigo.
a) MessageBox. Show( t hi s, " Hol a" ) ;
b) MessageBox. Show( " Hol a" ) ;

Figura 18.10
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

16/27
b) MessageBox. Show( t hi s, " Hol a" , " Est e es el t t ul o del mensaj e" ) ;

Figura 18.11
c) MessageBox. Show( t hi s, " Hol a" , " T t ul o mensaj e" , MessageBoxBut t ons. OK) ;



Figura 18.12

c) MessageBox. Show( t hi s,
" Hol a" ,
" T t ul o mensaj e" ,
MessageBoxBut t ons. YesNoCancel ) ;



Figura 18.13

d) MessageBox. Show( t hi s,
" Hol a" ,
" T t ul o mensaj e" ,
MessageBoxBut t ons. Abor t Ret r yI gnor e) ;



Figura 18.14

e) MessageBox. Show( t hi s,
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

17/27
" Hol a" ,
" T t ul o mensaj e" ,
MessageBoxBut t ons. Abor t Ret r yI gnor e,
MessageBoxI con. Ast er i sk) ;



Figura 18.15

f) MessageBox. Show( t hi s,
" Hol a" ,
" T t ul o mensaj e" ,
MessageBoxBut t ons. OKCancel ,
MessageBoxI con. St op,
MessageBoxDef aul t But t on. But t on2) ;



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.















CommonDi al og
Component
Obj ect
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

18/27


















Figura 18.17. J erarqua de las clases correspondientes a los cuadros de dilogo estndar.

Todas estas clases derivan de la clase CommonDi al og, excepto la clase
Pr i nt Pr evi ewDi al og que deriva directamente de la clase For m.

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:


Di al ogResul t
ShowDi al og( )
Este mtodo despliega el cuadro de dilogo
voi d Reset ( )
Pone los valores predeterminados.
Event Handl er
Hel pRequest
Este evento se lanza cuando el usuario pulsa el botn de
ayuda en el cuadro de dilogo

El mtodo ms importante de CommonDi al og es ShowDi al og( ) que devuelve un objeto
de tipo Di al ogResul t que en estos cuadros de dilogo puede tomar dos valores:

Di al ogResul t . OK si el usuario pulsa el botn Ok en el cuadro de dilogo.
Di al ogResul t . 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
ShowDi al og( ) y ste, a su vez, invoca al mtodo RunDi al og( ) . Una vez que se ha
cerrado el cuadro, ShowDi al og( ) devuelve un objeto de tipo Di al ogResul t que
encapsula la informacin acerca de cmo el usuario ha interactuiado con la caja de
dilogo.
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

19/27

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 ShowDi al og( ) 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 Fi l eName el nombre del fichero
que se ha selecionado, se cierra el cuadro y se chequea si el valor devuelto por el
mtodo ShowDi al og( ) es Di al ogResul t . Ok. Despus se leen las propiedades que se
necesiten del cuadro de dilogo. El cdigo podra ser:

st r i ng nombr eFi cher o;
OpenFi l eDi al og dl g=new OpenFi l eDi al og( ) ;
dl g. Ti t l e= " Cuadr o de di al ogo Abr i r " ;
i f ( dl g. ShowDi al og( ) ==Di al ogResul t . OK)
nombr eFi cher o = dl g. Fi l eName;
el se
/ / Ot r oMet odo( ) ;


Realmente, para abrir el cuadro de dilogo, slo son necesarias estas dos lneas de
cdigo:

OpenFi l eDi al og dl g=new OpenFi l eDi al og( ) ;
dl g. ShowDi al og( ) ;

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:

Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

20/27

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
Fi l eDi al og es una clase abstracta y no puede ser instanciada directamente. De esta
clase heredan las clases OpenFi l eDi al og y SaveFi l eDi al og.
Fi l eDi al og es un cuadro de dilogo modal.
Propiedades
bool AddExt ensi on
Indica si se aade una extensin de un tipo de fichero si el
usuario omite la extensin.
bool CheckFi l eExi st s
Indica si se presenta un cuadro de dilogo de aviso si el
usuario especifica un nombre de fichero que no existe.
bool CheckPat hExi st s
Indica si se presenta un cuadro de dilogo de aviso si el
usuario especifica un path que no existe.
st r i ng Def aul t Ext
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.
st r i ng Fi l eName
Es un string con el nombre del fichero seleccionado en el
cuadro de dilogo.
st r i ng[ ] Fi l eNames
Obtiene todos los ficheros seleccionados en el cuadro de
dilogo.
st r i ng Fi l t er
Determina el filtro que determina los tipos de ficheros
que aparecen en las cajas de texto Guardar como tipo
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

21/27
o Tipo de archivo.
i nt Fi l t er I ndex
El ndice del filtro actualmente seleccionado. El primer
ndice es el 1.
st r i ng I ni t i al Di r ect or y
Directorio inicial al abrirse el cuadro de dilogo.
bool Rest or eDi r ect or y
Especifica si se restaura los valores del cuadro de dilogo
antes de cerrarlo.
bool ShowHel p
Indica si se despliega el botn Hel p en el cuadro de
dilogo.
st r i ng Ti t l e
Ttulo del cuadro de dilogo.
Eventos
Cancel Event handl er Fi l eOk
Ocurre cuando el usuario pulsa el botn Abr i r o
Guar dar 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 Fi l eName 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 ShowReadOnl y determina si aparece un CheckBox en el cuadro para indicar
la opcin de slo lectura. La propiedad ReadOnl yChecked 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 Fi l eDi al og. A
continuacin se estudian los miembros de Fi l eDi al og.
Propiedades
bool Mul t i sel ect
Indica si puede hacerse una seleccin mltiple o no.
bool ReadOnl yChecked
Indica si el CheckBox est seleccionado o no.
bool ShowReadOnl y
Indica si el cuadro de dilogo contiene una opcin un
CheckBox- de slo lectura.
Mtodos
St r eamOpenFi l e( )
Abre el fichero especificado en la propiedad Fi l eName
seleccionado por el usuario con permiso de slo lectura.
Por ejemplo, ste poda ser un cdigo para este control:
St r eammi St r eam;
OpenFi l eDi al og openDi al og = new OpenFi l eDi al og( ) ;

openDi al og. I ni t i al Di r ect or y = " c: \ \ " ;
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

22/27
openDi al og. Fi l t er = " t xt f i l es ( *. t xt ) | *. t xt | Al l f i l es ( *. *) | *. *"
;
openDi al og. Fi l t er I ndex = 2 ;
openDi al og. Rest or eDi r ect or y = t r ue ;

i f ( openDi al og. ShowDi al og( ) == Di al ogResul t . OK)
{
i f ( ( mi St r eam= openDi al og. OpenFi l e( ) ) ! = nul l )
{
/ / Cdi go par a l eer el St r eam.
mi St r eam. Cl ose( ) ;
}
}

Las dos siguientes propiedades son especficas de la clase SaveFi l eDi al og.

bool Cr eat ePr ompt
Indica si el usuario puede crear un fichero que no existe.
bool Over wr i t ePr ompt
Indica si el cuadro de dilogo Guar dar 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 Al l owFul l Open
Indica si el usuario puede utilizar el cuadro de dilogo para
definir colores personalizados.
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

23/27
bool AnyCol or
Indica si el cuadro de dilogo presenta todos los colores
disponibles del juego bsico de colores.
Col or Col or
Color actual o color seleccionado por el usuario.
bool Cust omCol or s
Indica si se pueden definir colores personalizados.
bool Ful l Open
Indica si se ensea el cuadro de dilogo completo, es decir,
con la parte de los colores personalizados.
bool ShowHel p
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
Col or Col or
Indica el color de la fuente seleccionada.
Font Font
Indica la fuente actual o la fuente seleccionada por el usuario.
i nt MaxSi ze
Indica el valor de tamao mximo de la fuente.
i nt Mi nSi ze
Idem, mnimo.
bool ShowAppl y
Indica si el cuadro de dilogo tiene botn Apl i car .
bool ShowCol or
Indica si el cuadro de dilogo proporciona la opcin de color de la
letra.
bool ShowEf f ect s
Indica si el cuadro de dilogo contiene controles que permitan
especificar las caractersticas de tachado, subrayado y color del
texto.
bool ShowHel p
Indica si se presenta en el cuadro de dilogo un botn de ayuda.
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

24/27


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, Ri chText Box, 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:
publ i c voi d LoadFi l e( st r i ng nombr eDel Fi cher o) ;
publ i c voi d SaveFi l e( st r i ng nombr eDel Fi cher o) ;
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 Pr oyect oDi al ogosEst andar .
b) Cambie el nombre del fichero For m1. cs a Pr ocesador DeText os. cs.
c) Cambie las siguientes propiedades del formulario:

Name: Pr ocesador DeText os
Text : Pr ocesador de Text os

Cambie la lnea del mtodo Mai n( )

Appl i cat i on. Run( new For m1( ) ) ;

por la lnea:

Appl i cat i on. Run( new Pr ocesador DeText os( ) ) ;

OJ O con esto que puede ser slo para la versin beta

d) Site un control Ri chText Box en el formulario con las siguientes propiedades:
Name: t ext o
Text : ( Vac o)
Dock: Fi l l
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 Mai nMenu al formulario con las propiedades siguientes:
Name: menu
Opci ones de Menu:
Disee el men con dos opciones principales, Ar chi vo y For mat o y en cada una
de ellas las siguienetes opciones de men:

Menu Propiedades Propiedad Text
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

25/27
Archivo
mAr chi vo Ar chi vo
Nuevo
mNuevo Nuevo
Abrir
mAbr i r Abr i r
Guardar
mGuar dar Guar dar
- (Signo -)
mSepar ador -
Salir
mSal i r Sal i r
Formato
mFor mat o For mat o
Fuente
mFuent e Fuent e
Color de fondo
mCol or Fondo Col or de f ondo


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

OpenFi l eDi al og

Name: dl gAbr i r
Fi l t er : Document os de t ext ( *. t xt ) | *. t xt | Todos ( *. *) | *. *
Def aul t Ext : t xt
ShowHel p: Tr ue
ShowReadOnl y: Fal se
Ti t l e: Di l ogo Abr i r f i cher o

SaveFi l eDi al og

Name: dl gGuar dar
AddExt ensi on: t r ue
Fi l t er : Document os de t ext ( *. t xt ) | *. t xt | Todos ( *. *) | *. *
Fi l eName: doc1
Def aul t Ext : t xt
Rest or eDi r ect or y: Fal se
ShowHel p: Tr ue
Ti t l e: Di l ogo Guar dar f i cher o


Col or Di al og

Name: dl gCol or
Al l owFul l Open: Tr ue
Ful l Open: Fal se
ShowHel p: Tr ue
Sol i dCol or Onl y: Fal se


Font Di al og

Name: dl gFuent e
ShowAppl y: Tr ue
ShowCol or : Tr ue
ShowEf f ect s: Tr ue
ShowHel p: Tr ue

Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

26/27


Figura 18.21. Editor de textos

g) Cree un miembro privado, denominado nombr eFi cher o de tipo st r i ng, e
incielo en el constructor del formulario de la siguiente manera:

/ / mi embr o
pr i vat e st r i ng nombr eFi cher o;
/ / const r uct or
publ i c Pr ocesador DeText os( )
{
I ni t i al i zeComponent ( ) ;
nombr eFi cher o=" Si nt i t ul o" ;
t hi s. Text =nombr eFi cher o;
}

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


Men Nuevo:

pr i vat e voi d mNuevo_Cl i ck( obj ect sender , Syst em. Event Ar gs e)
{
nombr eFi cher o=" Si nt i t ul o" ;
t ext o. Cl ear ( ) ;
t hi s. Text =nombr eFi cher o;
}

Men Abr i r :

pr i vat e voi d mAbr i r _Cl i ck( obj ect sender , Syst em. Event Ar gs e)
{
i f ( dl gAbr i r . ShowDi al og( ) == Di al ogResul t . OK) {
nombr eFi cher o=dl gAbr i r . Fi l eName;
t ext o. LoadFi l e( nombr eFi cher o) ;
t hi s. Text =nombr eFi cher o;
}
}

Men Guar dar

pr i vat e voi d mGuar dar _Cl i ck( obj ect sender , Syst em. Event Ar gs e)
{
i f ( dl gGuar dar . ShowDi al og( ) == Di al ogResul t . OK)
Marco Besteiro y Miguel Rodrguez Cuadros de Dilogo

27/27
{
nombr eFi cher o=dl gAbr i r . Fi l eName;
t ext o. SaveFi l e( nombr eFi cher o) ;
t hi s. Text =nombr eFi cher o;
}
}

Men Sal i r

pr i vat e voi d mSal i r _Cl i ck( obj ect sender , Syst em. Event Ar gs e)
{
Appl i cat i on. Exi t ( ) ;
}

Men Fuent e

pr i vat e voi d mFuent e_Cl i ck( obj ect sender , Syst em. Event Ar gs e)
{
i f ( dl gFuent e. ShowDi al og( ) == Di al ogResul t . OK)
{
t ext o. Font =dl gFuent e. Font ;
t ext o. For eCol or =dl gFuent e. Col or ;
}
}

Men Col or de Fondo:

pr i vat e voi d mCol or Fondo_Cl i ck( obj ect sender , Syst em. Event Ar gs e)
{
i f ( dl gCol or . ShowDi al og( ) == Di al ogResul t . OK)
t ext o. BackCol or =dl gCol or . Col or ;

}

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).

S-ar putea să vă placă și