Programacion Visual - Tema 4 - Cajas de Dialogo

download Programacion Visual - Tema 4 - Cajas de Dialogo

of 21

Transcript of Programacion Visual - Tema 4 - Cajas de Dialogo

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    1/21

    Informacin general sobre cuadros de dilogo

    Las aplicaciones independientes tienen normalmente una ventana principal, que tanto muestra losdatos principales sobre los que funciona la aplicacin como expone la funcionalidad deprocesamiento de datos a travs de mecanismos de interfaz de usuario (UI) tales como barras demens, barras de herramientas y barras de estado. Una aplicacin no trivial tambin puedemostrar ventanas adicionales para hacer lo siguiente:

    Mostrar informacin especfica a los usuarios Recopilar informacin de los usuarios. Tanto mostrar como recopilar informacin.

    Estos tipos de ventanas se conocen como cuadros de dilogo y hay dos tipos: modales y no

    modales.

    Los cuadros de dilogo modales los muestras las funciones cuando necesitan datos adicionalesde los usuarios para continuar. Dado que la funcin depende del cuadro de dilogo modal pararecopilar los datos, el cuadro de dilogo modal tambin impide que un usuario active otrasventanas de la aplicacin mientras permanece abierto. En la mayora de los casos, los cuadros dedilogo modales permiten a los usuarios sealar que han terminado con el cuadro de dilogomodal presionando un botn Aceptar o Cancelar. Al presionar el botn Aceptar se indica que elusuario ha introducido los datos y desea que la funcin contine su proceso con esos datos.Presionar el botn Cancelar indica que el usuario desea detener la ejecucin de la funcin. Losejemplos ms comunes de cuadros de dilogo modales se muestran para abrir, guardar e

    imprimir datos.

    Un cuadro de dilogo no modal, por otra parte, no impide que el usuario active otras ventanasmientras est abierto. Por ejemplo, si un usuario desea buscar apariciones de una palabradeterminada en un documento, una ventana principal abrir habitualmente un cuadro de dilogopara preguntar al usuario qu palabra est buscando. Dado que la bsqueda de una palabra noimpide que un usuario edite el documento, no obstante, no es necesario que el cuadro de dilogosea modal. Un cuadro de dilogo no modal proporciona al menos un botn Cerrar para cerrar elcuadro de dilogo y puede proporcionar botones adicionales para ejecutar funciones concretas,como un botn Buscar siguiente para buscar la palabra siguiente que coincida con los criterios deuna bsqueda de palabra.

    Windows Presentation Foundation (WPF) permite crear varios tipos de cuadros de dilogo,incluidos cuadros de mensaje, cuadros de dilogo comunes y cuadros de dilogo personalizados.Este tema explica cada uno de ellos y Dialog Box Sampleproporciona ejemplos relacionados.

    Cuadros de mensaje

    Un cuadro de mensaje es un cuadro de dilogo que se puede utilizar para mostrar informacintextual y permitirles que los usuarios tomen decisiones con botones. La figura siguiente muestra

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    2/21

    un cuadro de mensaje que muestra informacin textual, hace una pregunta y proporciona alusuario tres botones para responder a la pregunta.

    Para crear un cuadro de mensaje, utilice la clase MessageBox. MessageBoxpermite configurar eltexto, el ttulo, el icono y los botones del cuadro de mensaje, utilizando cdigo como el siguiente.

    // Configure the message box to be displayed

    stringmessageBoxText = "Do you want to save changes?";

    stringcaption = "Word Processor";

    MessageBoxButton button = MessageBoxButton.YesNoCancel;

    MessageBoxImage icon = MessageBoxImage.Warning;

    Para mostrar un cuadro de mensaje, llame al mtodo static Show, como se muestra en el cdigosiguiente.

    // Display message box

    MessageBox.Show(messageBoxText, caption, button, icon);

    Cuando el cdigo que muestra un cuadro de mensaje necesite detectar y procesar la decisin delusuario (qu botn se presion), el cdigo puede inspeccionar el resultado del cuadro demensaje, como se muestra en el cdigo siguiente.

    // Display message box

    MessageBoxResult result = MessageBox.Show(messageBoxText, caption, button,

    icon);

    // Process message box results

    switch(result)

    {

    caseMessageBoxResult.Yes:

    // User pressed Yes button

    // ...

    break;

    caseMessageBoxResult.No:

    // User pressed No button

    // ...

    break;

    caseMessageBoxResult.Cancel:

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    3/21

    // User pressed Cancel button

    // ...

    break;

    }

    Aunque MessageBoxpuede proporcionar una experiencia simple de usuario de cuadro dedilogo, la ventaja de utilizar MessageBoxes que se trata del nico tipo de ventana que puedenmostrar las aplicaciones que se ejecutan dentro de un recinto de seguridad confiable parcial (veaSeguridad (WPF)), tal como Aplicaciones del explorador XAML (XBAPs).

    La mayora de los cuadros de dilogo muestran y recopilan datos ms complejos que el resultadode un cuadro de mensaje, incluidos texto, selecciones (casillas), selecciones mutuamenteexcluyentes (botones de radio) y selecciones de lista (cuadros de lista, cuadros combinados,

    cuadros de lista desplegables). Para stos, Windows Presentation Foundation (WPF) proporcionavarios cuadros de dilogo comunes y permite crear cuadros de dilogo propios, aunque el uso decualquiera de ellos se limita a aplicaciones que se ejecuten con plena confianza.

    Cuadros de dilogo comunes

    Windows implementa diversos cuadros de dilogo reutilizables que son comunes para todas lasaplicaciones, incluidos cuadros de dilogo para abrir archivos, guardar archivos e imprimir.Puesto que es el sistema operativo el que implementa estos cuadros de dilogo, se puedencompartir entre todas las aplicaciones que se ejecutan en el sistema operativo, los que contribuye

    a la coherencia de la experiencia del usuario; cuando los usuarios estn familiarizados con el usode un cuadro de dilogo proporcionado por el sistema operativo en una aplicacin, no necesitanobtener informacin sobre cmo utilizar ese cuadro de dilogo en otras aplicaciones. Dado queestos cuadros de dilogo estn disponibles para todas las aplicaciones y que ayudan aproporcionar una experiencia de usuario coherente, se conocen como cuadros de dilogocomunes.

    Windows Presentation Foundation (WPF) encapsula los cuadros de dilogo: "Abrir Archivo","Guardar Archivo" e "Imprimir" y los expone como clases administradas para que los utilice enaplicaciones independientes. En este tema se proporciona una breve informacin general sobre:

    Abrir archivo (Dilogo)

    La funcionalidad de apertura de archivos utiliza el cuadro de dilogo de apertura de archivos, quese muestra en la figura siguiente, para recuperar el nombre de un archivo a abrir.

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    4/21

    El cuadro de dilogo comn de apertura de archivos se implementa como la claseOpenFileDialogy se encuentra en el espacio de nombres Microsoft.Win32. El cdigo siguientemuestra cmo crear, configurar y mostrar uno, y cmo procesar el resultado.

    // Configure open file dialog box

    Microsoft.Win32.OpenFileDialog dlg = newMicrosoft.Win32.OpenFileDialog();

    dlg.FileName = "Document"; // Default file name

    dlg.DefaultExt = ".txt"; // Default file extension

    dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension

    // Show open file dialog box

    Nullable result = dlg.ShowDialog();

    // Process open file dialog box results

    if(result == true)

    {

    // Open document

    stringfilename = dlg.FileName;}

    Guardar archivo (Cuadro de dilogo)

    La funcionalidad de guardado de archivos utiliza el cuadro de dilogo de guardado de archivos,que se muestra en la figura siguiente, para recuperar el nombre de un archivo a guardar.

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    5/21

    El cuadro de dilogo comn de guardado de archivos se implementa como la claseSaveFileDialogy se encuentra en el espacio de nombres Microsoft.Win32. El cdigo siguientemuestra cmo crear, configurar y mostrar uno, y cmo procesar el resultado.

    // Configure save file dialog box

    Microsoft.Win32.SaveFileDialog dlg = newMicrosoft.Win32.SaveFileDialog();

    dlg.FileName = "Document"; // Default file name

    dlg.DefaultExt = ".text"; // Default file extension

    dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension

    // Show save file dialog box

    Nullable result = dlg.ShowDialog();

    // Process save file dialog box results

    if(result == true)

    {

    // Save document

    stringfilename = dlg.FileName;}

    Imprimir (Cuadro de dilogo)

    La funcionalidad de impresin de archivos utiliza el cuadro de dilogo de impresin de archivos,que se muestra en la figura siguiente, para elegir y configurar la impresora en la que el usuariodesea imprimir datos.

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    6/21

    El cuadro de dilogo comn de impresin de archivos se implementa como la clase PrintDialogy

    se encuentra en el espacio de nombres System.Windows.Controls. El cdigo siguiente muestracmo crear, configurar y mostrar uno.

    // Configure printer dialog box

    System.Windows.Controls.PrintDialog dlg = new

    System.Windows.Controls.PrintDialog();

    dlg.PageRangeSelection = PageRangeSelection.AllPages;

    dlg.UserPageRangeEnabled = true;

    // Show save file dialog box

    Nullable result = dlg.ShowDialog();

    // Process save file dialog box results

    if(result == true){

    // Print document

    }

    Cuadros de dilogo personalizados

    Aunque los cuadros de dilogo comunes son tiles, y se deben utilizar cuando sea posible, nosatisfacen las necesidades de los cuadros de dilogo especficos de dominio. En estos casos, es

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    7/21

    necesario crear cuadros de dilogo propios. Como veremos, un cuadro de dilogo es una ventanacon comportamientos especiales. Windowimplementa esos comportamientos y, porconsiguiente, utiliza Windowpara crear cuadros de dilogo modales y no modalespersonalizados.

    Crear un cuadro de dilogo personalizado modal

    En este tema se muestra cmo utilizar Windowpara crear una implementacin de un cuadro dedilogo modal tpico, utilizando el cuadro de dilogo Margins como ejemplo (vea Dialog BoxSample). El cuadro de dilogo Margins se muestra en la figura siguiente.

    Configurar un cuadro de dilogo modal

    La interfaz de usuario de un cuadro de dilogo tpico incluye lo siguiente:

    Los diversos controles necesarios para recopilar los datos deseados. Mostrar un botn Aceptar en el que los usuarios hacen clic para cerrar el cuadro de

    dilogo, volver a la funcin y continuar el proceso. Mostrar un botn Cancelar en el que los usuarios hagan clic para cerrar el cuadro de

    dilogo y hacer que la funcin detenga el proceso. Mostrar un botn Cerrar en la barra de ttulo. Mostrar un icono. Mostrar botones Minimizar, Maximizary Restaurar. Mostrar un men Sistema para minimizar, maximizar, restaurar y cerrar el cuadro de

    dilogo. Apertura encima y en el centro de la ventana que abri el cuadro de dilogo. Los cuadros de dilogo deben ser de tamao variable cuando sea posible de modo que,

    para evitar que resulten ser demasiado pequeos y para proporcionar al usuario untamao predeterminado til, deber establecer tanto unas dimensiones predeterminadascomo unas dimensiones mnimas.

    Es recomendable configurar la accin de presionar la tecla ESC como un mtodoabreviado de teclado que haga que se presione el botn Cancelar. Esto se lograestableciendo la propiedad IsCanceldel botn Cancelar en true.

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    8/21

    Es recomendable configurar la accin de presionar la tecla Entrar (o Retorno) como unmtodo abreviado de teclado que provoca que se presione el botn Aceptar. Esto se lograestableciendo la propiedad IsDefaultdel botn Aceptar en true.

    El cdigo siguiente muestra esta configuracin.

    usingSystem.Windows; // Window, RoutedEventArgs, IInputElement,

    DependencyObject

    usingSystem.Windows.Controls; // Validation

    usingSystem.Windows.Input; // Keyboard

    namespaceSDKSample

    {

    publicpartialclassMarginsDialogBox : Window

    {

    publicMarginsDialogBox()

    {

    InitializeComponent();

    }

    ...

    }

    }

    Abrir un cuadro de dilogo modal

    Un cuadro de dilogo se muestra normalmente como resultado de la seleccin de un elemento demen, por parte de un usuario, para realizar una funcin especfica del dominio, tal comoestablecer los mrgenes de un documento en un procesador de textos. Mostrar una ventana comoun cuadro de dilogo es similar a mostrar una ventana normal, aunque requiere la configuracinadicional especfica del cuadro de dilogo. El proceso completo de crear instancias, configurar yabrir un cuadro de dilogo se muestra en el cdigo siguiente.

    usingSystem; // EventArgs

    usingSystem.ComponentModel; // CancelEventArgs

    usingSystem.Windows; // Window, MessageBoxXxx, RoutedEventArgsusingSystem.Windows.Controls; // TextChangedEventArgs

    usingMicrosoft.Win32; // OpenFileDialog

    namespaceSDKSample

    {

    publicpartialclassMainWindow : Window

    {

    ...

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    9/21

    voidformatMarginsMenuItem_Click(objectsender, RoutedEventArgs e)

    {

    // Instantiate the dialog box

    MarginsDialogBox dlg = newMarginsDialogBox();

    // Configure the dialog box

    dlg.Owner = this;

    dlg.DocumentMargin = this.documentTextBox.Margin;

    // Open the dialog box modally

    dlg.ShowDialog();

    ...

    }

    ...

    }

    }

    Aqu, el cdigo est pasando informacin predeterminada (los mrgenes actuales) al cuadro dedilogo. Tambin est estableciendo la propiedad Window.Ownercon una referencia a laventana que est mostrando el cuadro de dilogo. En general, siempre se debe establecer elpropietario de un cuadro de dilogo para ofrecer comportamientos relacionados con el estado dela ventana que son comunes a todos los cuadros de dilogo.

    Una vez configurado el cuadro de dilogo, se mostrar modalmente llamando al mtodoShowDialog.

    Validar datos proporcionados por el usuario

    Cuando se abre un cuadro de dilogo y el usuario proporciona los datos necesarios, el cuadro dedilogo es responsable de asegurarse que los datos proporcionados sean vlidos por las razonessiguientes:

    Desde la perspectiva de la seguridad, todas las entradas se deben validar. Desde la perspectiva especfica del dominio, la validacin de datos impide que el cdigo

    procese datos errneos, lo que podra iniciar excepciones. Desde la perspectiva de un usuario, un cuadro de dilogo puede ayudar a los usuarios

    mostrndoles qu datos de los introducidos no son vlidos. Desde la perspectiva del rendimiento, la validacin de datos en una aplicacin de varios

    niveles puede reducir el nmero de viajes de ida y vuelta entre los niveles de cliente y de

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    10/21

    aplicacin, en particular cuando la aplicacin se compone de servicios Web o bases dedatos basadas en servidor.

    Para validar un control enlazado en WPF, debe definir una regla de validacin y asociarla alenlace. Una regla de validacin es una clase personalizada derivada de ValidationRule. Elejemplo siguiente muestra una regla de validacin, MarginValidationRule, que comprueba queun valor enlazado es Doubley est dentro de un intervalo especificado.

    usingSystem.Globalization;

    usingSystem.Windows.Controls;

    namespaceSDKSample

    {

    publicclassMarginValidationRule : ValidationRule

    {doubleminMargin;

    doublemaxMargin;

    publicdoubleMinMargin

    {

    get{ returnthis.minMargin; }

    set{ this.minMargin = value; }

    }

    publicdoubleMaxMargin

    {

    get{ returnthis.maxMargin; }

    set{ this.maxMargin = value; }

    }

    publicoverrideValidationResult Validate(objectvalue, CultureInfo

    cultureInfo)

    {

    doublemargin;

    // Is a number?

    if(!double.TryParse((string)value, outmargin))

    {

    returnnewValidationResult(false, "Not a number.");

    }

    // Is in range?if((margin < this.minMargin) || (margin > this.maxMargin))

    {

    stringmsg = string.Format("Margin must be between {0} and

    {1}.", this.minMargin, this.maxMargin);

    returnnewValidationResult(false, msg);

    }

    // Number is valid

    returnnewValidationResult(true, null);

    }

    }

    }

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    11/21

    En este cdigo, la lgica de validacin de una regla de validacin se implementa invalidando elmtodo Validate, que valida los datos y devuelve el objeto ValidationResultcorrespondiente.

    Para asociar la regla de validacin al control enlazado, utilice el marcado siguiente.

    XAML

    ...

    Left Margin:

    ...

    Una vez asociada la regla de validacin, WPF lo aplicar automticamente cuando seintroduzcan los datos en el control enlazado. Cuando un control contenga datos no vlidos, WPFmostrar un borde rojo alrededor del control no vlido, como se muestra en la figura siguiente.

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    12/21

    WPF no restringe a un usuario al control no vlido hasta que haya introducido datos vlidos. staes una buena prctica para un cuadro de dilogo; un usuario debe poder navegar libremente por

    los controles de un cuadro de dilogo tanto si los datos son vlidos como si no. Sin embargo, estosignifica que un usuario puede introducir datos no vlidos y presionar el Aceptar botn. Por estarazn, el cdigo necesita adems validar todos los controles del cuadro de dilogo cuando sepresione el botn Aceptar, controlando el evento Click.

    usingSystem.Windows; // Window, RoutedEventArgs, IInputElement,

    DependencyObject

    usingSystem.Windows.Controls; // Validation

    usingSystem.Windows.Input; // Keyboard

    namespaceSDKSample

    { publicpartialclassMarginsDialogBox : Window

    {

    ...

    voidokButton_Click(objectsender, RoutedEventArgs e)

    {

    // Don't accept the dialog box if there is invalid data

    if(!IsValid(this)) return;

    ...

    }

    // Validate all dependency objects in a window

    boolIsValid(DependencyObject node)

    {

    // Check if dependency object was passed

    if(node != null)

    {

    // Check if dependency object is valid.

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    13/21

    // NOTE: Validation.GetHasError works for controls that have

    validation rules attached

    boolisValid = !Validation.GetHasError(node);

    if(!isValid){

    // If the dependency object is invalid, and it can

    receive the focus,

    // set the focus

    if(node isIInputElement)

    Keyboard.Focus((IInputElement)node);

    returnfalse;

    }

    }

    // If this dependency object is valid, check all child dependency

    objects

    foreach(objectsubnode inLogicalTreeHelper.GetChildren(node))

    {if(subnode isDependencyObject)

    {

    // If a child dependency object is invalid, return false

    immediately,

    // otherwise keep checking

    if(IsValid((DependencyObject)subnode) == false) return

    false;

    }

    }

    // All dependency objects are valid

    returntrue;

    }}

    }

    Este cdigo enumera todos los objetos de dependencia de una ventana y, si hay alguno que no esvlido (si devuelve GetHasError, el control no vlido obtiene el foco, el mtodo IsValid devuelvefalse y la ventana se considera no vlida.

    Cuando un cuadro de dilogo es vlido, se puede cerrar y devolver sin ningn riesgo. Como partedel proceso de retorno, debe devolver un resultado a la funcin que realiza la llamada.

    Establecer el resultado del dilogo modal

    Abrir un cuadro de dilogo mediante ShowDialoges fundamentalmente como llamar a unmtodo: el cdigo que abri el cuadro de dilogo mediante ShowDialogespera hasta que vuelvaShowDialog. Cuando vuelve ShowDialog, el cdigo que lo llam debe decidir si contina odetiene el procesamiento, segn si el usuario presion el botn Aceptar o el botn Cancelar. Parafacilitar esta decisin, el cuadro de dilogo debe devolver la opcin del usuario como un valorBooleanque se devuelve desde el mtodo ShowDialog.

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    14/21

    Cuando se hace clic en el botn Aceptar, ShowDialogdebe devolver true. Esto se lograestableciendo la propiedad DialogResultdel cuadro de dilogo al hacer clic en el botn Aceptar.

    Tenga en cuenta que establecer la propiedad DialogResulttambin hace que la ventana se cierreautomticamente, los que elimina la necesidad de llamar explcitamente a Close.

    Cuando se hace clic en el botn Cancelar, ShowDialogdebe devolver false, que tambin requiereque se establezca la propiedad DialogResult.

    usingSystem.Windows; // Window, RoutedEventArgs, IInputElement,

    DependencyObject

    usingSystem.Windows.Controls; // Validation

    usingSystem.Windows.Input; // Keyboard

    namespaceSDKSample

    {publicpartialclassMarginsDialogBox : Window

    {

    ...

    voidcancelButton_Click(objectsender, RoutedEventArgs e)

    {

    // Dialog box canceled

    this.DialogResult = false;

    }

    ...

    }

    }

    Cuando la propiedad IsCancelde un botn se establece en true y el usuario presiona el botnCancelar o la tecla ESC, DialogResultse establece automticamente en false.

    Un cuadro de dilogo devuelve automticamente false cuando un usuario presiona el botnCerrar de la barra de ttulo o elige el elemento de men Cerrar en el men Sistema.

    Procesar datos devueltos desde un cuadro de dilogo modal

    Cuando un cuadro de dilogo establece DialogResult, la funcin que lo abri puede obtener elresultado del cuadro de dilogo inspeccionando la propiedad DialogResultcuando vuelveShowDialog.

    usingSystem; // EventArgs

    usingSystem.ComponentModel; // CancelEventArgs

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    15/21

    usingSystem.Windows; // Window, MessageBoxXxx, RoutedEventArgs

    usingSystem.Windows.Controls; // TextChangedEventArgs

    usingMicrosoft.Win32; // OpenFileDialog

    namespaceSDKSample

    {

    publicpartialclassMainWindow : Window

    {

    ...

    voidformatMarginsMenuItem_Click(objectsender, RoutedEventArgs e)

    {

    ...

    // Process data entered by user if dialog box is accepted

    if(dlg.DialogResult == true)

    {

    // Update fonts

    this.documentTextBox.Margin = dlg.DocumentMargin;

    }

    }

    ...

    }

    }

    Si el resultado del dilogo es true, la funcin lo utiliza como indicacin para recuperar y procesarlos datos proporcionados por el usuario.

    Nota

    Una vez que vuelve ShowDialog, no se puede volver a abrir el cuadro de dilogo. En su lugar,

    debe crear una nueva instancia.

    Si el resultado del dilogo es false, la funcin debe finalizar el procesamiento correctamente.

    Crear un cuadro de dilogo personalizado no modal

    Un cuadro de dilogo no modal, tal como el cuadro de dilogo Buscar que se muestra en lafigura siguiente, tiene el mismo aspecto fundamental que un cuadro de dilogo modal.

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    16/21

    Sin embargo, su comportamiento es ligeramente diferente, como se describe en las seccionessiguientes.

    Abrir un cuadro de dilogo no modal

    Un cuadro de dilogo no modal se abre llamando al mtodo Show.

    usingSystem; // EventArgs

    usingSystem.ComponentModel; // CancelEventArgs

    usingSystem.Windows; // Window, MessageBoxXxx, RoutedEventArgs

    usingSystem.Windows.Controls; // TextChangedEventArgs

    usingMicrosoft.Win32; // OpenFileDialog

    namespaceSDKSample

    {

    publicpartialclassMainWindow : Window

    {

    ...

    voideditFindMenuItem_Click(objectsender, RoutedEventArgs e)

    {

    // Instantiate the dialog box

    FindDialogBox dlg = newFindDialogBox(this.documentTextBox);

    // Configure the dialog box

    dlg.Owner = this;

    dlg.TextFound += newTextFoundEventHandler(dlg_TextFound);

    // Open the dialog box modally

    dlg.Show();

    }

    ...

    }

    }

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    17/21

    A diferencia de ShowDialog, Showvuelve inmediatamente. Por consiguiente, la ventana querealiza la llamada no puede distinguir cundo se cierra el cuadro de dilogo no modal y, enconsecuencia, no sabe cundo comprobar los resultados del cuadro de dilogo o recibir los datosdel cuadro de dilogo para continuar el procesamiento. En su lugar, el cuadro de dilogo debecrear una manera alternativa de devolver datos a la ventana que realiza la llamada para elprocesamiento.

    Procesar datos devueltos desde un cuadro de dilogo no modal

    En este ejemplo, FindDialogBox puede devolver uno o ms resultados de bsqueda a la ventanaprincipal, segn el texto que se est buscando, sin ninguna frecuencia concreta. Como con uncuadro de dilogo modal, un cuadro de dilogo no modal puede devolver resultados mediantepropiedades. Sin embargo, la ventana que posee el cuadro de dilogo necesita saber cundo debecomprobar esas propiedades. Una manera de habilitar esto es que el cuadro de dilogoimplemente un evento que se produzca siempre que se encuentre el texto. FindDialogBoximplementa TextFoundEvent para este propsito, que requiere primero un delegado.

    usingSystem;

    namespaceSDKSample

    {

    publicdelegatevoidTextFoundEventHandler(objectsender, EventArgs e);

    }

    Con el delegado TextFoundEventHandler, FindDialogBox implementa TextFoundEvent.

    usingSystem; // EventArgs

    usingSystem.Windows; // Window, MessageBoxXxx, RoutedEventArgs

    usingSystem.Windows.Controls; // TextBox, TextChangedEventArgs

    usingSystem.Text.RegularExpressions; // Regex

    namespaceSDKSample

    {

    publicpartialclassFindDialogBox : Window

    {

    publiceventTextFoundEventHandler TextFound;

    protectedvirtualvoidOnTextFound()

    { TextFoundEventHandler textFound = this.TextFound;

    if(textFound != null) textFound(this, EventArgs.Empty);

    }

    ...

    }

    }

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    18/21

    Por consiguiente, Find puede provocar el evento cuando se encuentra un resultado de bsqueda.

    usingSystem; // EventArgs

    usingSystem.Windows; // Window, MessageBoxXxx, RoutedEventArgsusingSystem.Windows.Controls; // TextBox, TextChangedEventArgs

    usingSystem.Text.RegularExpressions; // Regex

    namespaceSDKSample

    {

    publicpartialclassFindDialogBox : Window

    {

    ...

    voidfindNextButton_Click(objectsender, RoutedEventArgs e){

    ...

    // Text found

    this.index = match.Index;

    this.length = match.Length;

    OnTextFound();

    ...

    }

    ...

    }

    }

    La ventana propietaria necesita entonces registrarse con este evento y administrarlo.

    usingSystem; // EventArgs

    usingSystem.ComponentModel; // CancelEventArgs

    usingSystem.Windows; // Window, MessageBoxXxx, RoutedEventArgs

    usingSystem.Windows.Controls; // TextChangedEventArgs

    usingMicrosoft.Win32; // OpenFileDialog

    namespaceSDKSample

    {

    publicpartialclassMainWindow : Window

    {

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    19/21

    ...

    voiddlg_TextFound(objectsender, EventArgs e)

    {

    // Get the find dialog box that raised the event

    FindDialogBox dlg = (FindDialogBox)sender;

    // Get find results and select found text

    this.documentTextBox.Select(dlg.Index, dlg.Length);

    this.documentTextBox.Focus();

    }

    }

    }

    Cerrar un cuadro de dilogo no modal

    Dado que no es necesario establecer DialogResult, un dilogo no modal se puede cerrarutilizando los mecanismos proporcionados por el sistema, que incluyen los siguientes:

    Hacer clic en el botn Cerrar en la barra de ttulo. Presionar ALT + F4. Elegir Cerrar en el men Sistema.

    Como alternativa, el cdigo puede llamar a Closecuando se haga clic en el botn Cerrar.

    usingSystem; // EventArgs

    usingSystem.Windows; // Window, MessageBoxXxx, RoutedEventArgs

    usingSystem.Windows.Controls; // TextBox, TextChangedEventArgs

    usingSystem.Text.RegularExpressions; // Regex

    namespaceSDKSample

    {

    publicpartialclassFindDialogBox : Window

    {

    ...

    voidcloseButton_Click(objectsender, RoutedEventArgs e)

    {

    // Close dialog box

    this.Close();

    }

    }

    }

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    20/21

    Cmo aadir un InputBox en C#

    Aunque parezca mentira, no existe en C# un dilogo para pedir un dato. Si no tienes ganas decrear tu propio dilogo y no necesitas personalizacin, puedes hacer uso de la sentenciaInputBoxque se encuentra en el ensamblado Microsoft.VisualBasicEsta sentencia muestra un dilogo modal con una etiqueta, una caja de texto, un botn paraaceptar y otro para cancelar.

    La definicin de la sentencia InputBox es la siguiente:

    publicstaticstringInputBox(

    stringPrompt,

    stringTitle,

    stringDefaultResponse,intXPos,

    intYPos)

    Prompt: Mensaje del dilogo. Title: Opcional. Ttulo del dilogo. DefaultResponse: Opcional. Respuesta por defecto. xPos: Opcional. Coordenada X, por defecto centrado yPos: Opcional. Coordenada Y, por defecto centrado

    Pasos para aadir InputBox en C#

    1. Agregar la referencia al ensamblado Microsoft.VisualBasic:

  • 7/25/2019 Programacion Visual - Tema 4 - Cajas de Dialogo

    21/21

    2. Aadir la sentencia:

    privatevoidbtnClickInputBox_Click(objectsender, EventArgs e)

    {stringtexto =Microsoft.VisualBasic.Interaction.InputBox(

    "Texto de la pregunta",

    "Titulo del dilogo",

    "Respuesta por defecto");

    }

    Nota: si el usuario cancela el dilogo la sentencia retorna una cadena vaca.

    El resultado es: