Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cuadro S Dialogo
Cuadro S Dialogo
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.
1/27
Cuadros de Dilogo
2/27
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();
3/27
Cuadros de Dilogo
Name = FormularioPrincipal
=
=
=
=
btnIrCuadroDialogo
Ir al cuadro de dialogo
btnSalir
Salir
4/27
Cuadros de Dilogo
5/27
Cuadros de Dilogo
6/27
Cuadros de Dilogo
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)
7/27
Cuadros de Dilogo
8/27
Cuadros de Dilogo
9/27
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
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
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
Cuadros de Dilogo
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
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);
14/27
Cuadros de Dilogo
RightAlign, RtlReading
Figura 18.10
15/27
Cuadros de Dilogo
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
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
Object
Component
17/27
CommonDialog
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
Cuadros de Dilogo
En general, los pasos a seguir para utilizar un cuadro de dilogo estndar son:
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
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
20/27
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
Mtodos
Stream OpenFile()
21/27
Cuadros de Dilogo
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.
22/27
Cuadros de Dilogo
La clase FontDialog
Esta clase se utiliza para la seleccin de una fuente. Su aspecto es el de la figura 20.
23/27
Cuadros de Dilogo
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
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
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
Cuadros de Dilogo
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
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;
}
}
27/27