Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CuadrosDialogo PDF
CuadrosDialogo PDF
Cuadros de diálogo
En general, las cuadros de diálogo se utilizan para pedir datos o configurar variables
desde una aplicación. La plataforma .NET proporciona cuadros de diálogo predefinidos
pero también permite que el programador configure cuadros de diálogo según sus
necesidades. A continuación se estudian estos últimos y posteriormente se verán los que
proporciona la plataforma.
Un cuadro de diálogo puede ser modal -cuando la propia aplicación o formulario que
lo ha llamado no puede recibir ningún evento hasta que se ha cerrado el cuadro de
diálogo- o no modal –el caso contrario-.
1/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
Una vez que se despliega el cuadro de diálogo, 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 operación.
El botón btnOk del diálogo en realidad significa: “Estoy de acuerdo con la elección. Por
favor, utiliza este valor en el programa y cierra el cuadro de diálogo”. Y el
btnCancelar : ”Anula la elección, vuelve al estado anterior y cierra el cuadro de
diálogo”.
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.
2/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
Para contestar a esta pregunta es necesario saber que cuando se pulsa un botón del
diálogo suceden las siguientes cosas:
MetodoQueHaceMasCosas();
DialogResult.Abort
DialogResult.Cancel
DialogResult.Ignore
DialogResult.No
DialogResult. OK
DialogResult.Retry
DialogResult.Yes
None
3/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
Name = FormularioPrincipal
• A continuación añada dos botones al formulario principal. Asigne las propiedades
siguientes:
Name = btnIrCuadroDialogo
Text = Ir al cuadro de dialogo
Name = btnSalir
Text = Salir
4/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
5/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
Name = btnCancelar
Text = Cancelar
DialogResult = cancel
6/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
Para poder acceder a este campo de modo sencillo defina una propiedad
pública, de nombre NombreFichero para leer y almacenar un string en el
campo nombreFichero.
Para ello, en la ventana Vista de clases pulse con botón derecho sobre el
nombre de la clase –MiDialogo- y seleccione la opción Agregar/Agregar
Propiedad, como se indica en la figura 18.6)
7/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
8/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
//*************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 Rodríguez Cuadros de Diálogo
InitializeComponent();
}
10/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
}
#endregion
[STAThread]
static void Main()
{
Application.Run(new FormularioPrincipal());
}
}
}
}
//***************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;
//Mis variables
private string nombreFichero;
public string NombreFichero
{
get
{
return nombreFichero;
}
set
{
nombreFichero=value;
}
}
public MiDialogo()
{
11/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
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 Rodríguez Cuadros de Diálogo
}
#endregion
La clase MessageBox
No tiene constructor público, por lo que no es posible crear un objeto o instancia de esta
clase. Para visualizar un MessageBox se invoca al método estático Show().
13/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
Figura 18.9
Si, por ejemplo, en un formulario se ha situado un botón y una caja de texto y se desea
que si se pulsa el botón estando la caja de texto vacía, se avise al usuario con un
MessageBox que le indique que la caja de texto debe rellenarse con algún dato, el
código del botón sería algo parecido al siguiente:
Esta clase hereda directamente de la clase Object y sólo tiene un método que no sea
heredado que es precisamente Show(). Devuelve el valor de la propiedad
DialogResult del botón pulsado.
Desde el simple:
hasta
14/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
a) MessageBox.Show(this,"Hola");
b) MessageBox.Show("Hola");
Figura 18.10
15/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
Figura 18.11
c) MessageBox.Show(this,"Hola","Título mensaje",MessageBoxButtons.OK);
Figura 18.12
c) MessageBox.Show(this,
"Hola",
"Título mensaje",
MessageBoxButtons.YesNoCancel);
Figura 18.13
d) MessageBox.Show(this,
"Hola",
"Título mensaje",
MessageBoxButtons.AbortRetryIgnore);
Figura 18.14
e) MessageBox.Show(this,
16/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
"Hola",
"Título mensaje",
MessageBoxButtons.AbortRetryIgnore,
MessageBoxIcon.Asterisk);
Figura 18.15
f) MessageBox.Show(this,
"Hola",
"Título mensaje",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Stop,
MessageBoxDefaultButton.Button2);
Figura 18.16
Object
Component
17/27
CommonDialog
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
Figura 18.17. Jerarquía de las clases correspondientes a los cuadros de diálogo estándar.
La clase CommonDialog
Esta clase base define los siguientes métodos y eventos, que son comunes a todas las
clases que derivan de ella (Figura 18.17). Los más importantes son:
En general, todas las clases que corresponden a cuadros de diálogo estándar son muy
parecidas. Para presentar en pantalla el cuadro de diálogo se invoca el método
ShowDialog() y éste, a su vez, invoca al método RunDialog(). Una vez que se ha
cerrado el cuadro, ShowDialog() devuelve un objeto de tipo DialogResult que
encapsula la información acerca de cómo el usuario ha interactuiado con la caja de
diálogo.
18/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
En general, los pasos a seguir para utilizar un cuadro de diálogo estándar son:
Suponga, por ejemplo que se desea llamar al cuadro de diálogo correspondiente a abrir
un fichero. Después de haber realizado los tres pasos anteriores, el usuario selecciona un
fichero y pulsa el botón 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
método ShowDialog() es DialogResult.Ok. Después se leen las propiedades que se
necesiten del cuadro de diálogo. El código podría 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 diálogo, sólo son necesarias estas dos líneas de
código:
OpenFileDialog dlg=new OpenFileDialog();
dlg.ShowDialog();
Observe que el cuadro de diálogo sólo selecciona el fichero y no lo abre. Para ello. el
programador debe escribir un determinado código.
El resto de los cuadros de dialogo estándar funcionan de una manera muy parecida pero
cada uno de ellos tiene una funcionalidad específica y pueden seleccionar de manera
visual un fichero, una fuente, un color, etc... y lo asignan a la propiedad
correspondiente.
19/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
La clase FileDialog
Propiedades
20/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
…” o “Tipo de archivo….”
int FilterIndex El índice del filtro actualmente seleccionado. El primer
índice es el 1.
string InitialDirectory Directorio inicial al abrirse el cuadro de diálogo.
bool RestoreDirectory Especifica si se restaura los valores del cuadro de diálogo
antes de cerrarlo.
bool ShowHelp Indica si se despliega el botón Help en el cuadro de
diálogo.
string Title Título del cuadro de diálogo.
Eventos
Representan dos cuadros de diálogo 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 opción de sólo lectura. La propiedad ReadOnlyChecked indica el estado del
CheckBox de sólo lectura.
Ambas clases tienen miembros muy parecidos, por lo que se estudiarán juntas. La
mayor parte de la funcionalidad de estas clases la proporciona la clase FileDialog. A
continuación se estudian los miembros de FileDialog.
Propiedades
Métodos
Stream miStream;
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.InitialDirectory = "c:\\" ;
21/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
if(openDialog.ShowDialog() == DialogResult.OK)
{
if((miStream = openDialog.OpenFile())!= null)
{
// Código para leer el Stream.
miStream.Close();
}
}
La clase ColorDialog
Propiedades.
22/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
La clase FontDialog
Esta clase se utiliza para la selección de una fuente. Su aspecto es el de la figura 20.
Propiedades
23/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
A continuación se implementa un sencillo editor de textos con una serie de menús 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 métodos para leer y guardar un fichero en formato
RTF o de texto La estructura de estos dos métodos es la siguiente:
Application.Run(new Form1());
por la línea:
Application.Run(new ProcesadorDeTextos());
OJO con esto que puede ser sólo para la versión beta
24/27
Marco Besteiro y Miguel Rodríguez Cuadros de Diálogo
f) Añada 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: Diálogo Abrir fichero
• SaveFileDialog
Name: dlgGuardar
AddExtension: true
Filter: Documentos de text (*.txt)|*.txt|Todos (*.*)|*.*
FileName: doc1
Default Ext: txt
RestoreDirectory: False
ShowHelp: True
Title: Diálogo 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 Rodríguez Cuadros de Diálogo
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 Rodríguez Cuadros de Diálogo
{
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