48
Marco Besteiro y Miguel Rodríguez Controles Windows Los controles principales En el anterior capítulo se han estudiado las clases principales para el diseño de aplicaciones Windows. A continuación se describen los controles más utilizados para este tipo de aplicaciones. Las clases RadioButton y CheckBox La clase base de estos dos controles, al igual que el de la clase Button es ButtonBase. El control RadioButton se utiliza cuando se pretende elegir una única opción entre varias. Un buen ejemplo lo constituye un formulario en que el usuario debe elegir, al rellenar sus datos personales, si es hombre o mujer. Un RadioButton sólo puede tener dos estados: seleccionado o no seleccionado. Los controles RadioButton deben ser mutuamente excluyentes entre sí. Esto se consigue haciendo que pertenezcan a una misma unidad “lógica” por medio de un control GroupBox, o bien, si únicamente es una unidad, el formulario que los contiene los agrupa. Para hacer esto, se ubica en primer lugar en el formulario el control GroupBox y posteriormente, se van colocando en su interior los controles RadioButton que deban estar ligados entre sí. Si no se hace de esta manera, pueden elegirse varias opciones RadioButton de manera simultánea, es decir, no serán excluyentes entre sí. Un CheckBox permite elegir varias opciones que no sean mutuamente excluyentes. Un buen ejemplo, es un formulario en el que se pregunte acerca de los idiomas que se habla. A diferencia de un RadioButton, este control puede tener tres estado: seleccionado, no seleccionado e inhabilitado, que es un estado en el cual el control se dibuja en gris y no tiene ningún efecto hacer click sobre él. A continuación se estudian las propiedades y eventos más importantes y se realizará un sencillo ejemplo. Propiedades Appearance Define la apariencia del control, bien con apariencia estándar o bien con apariencia de un botón en 3D. AutoCheck Hace que el control cambie de estado siempre que se haga click sobre él. Checked Indica si el control está en estado seleccionado o no. CheckState Indica el estado de selección del control. Sólo para el CheckBox. Puede ser Unchecked, Checked o Indeterminate. En este último, el control se dibuja en gris. ThreeState (Sólo CheckBox) Propiedad booleana. A False no se permite el estado Indeterminate. A True, se permiten los tres estados 1/48

Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Embed Size (px)

Citation preview

Page 1: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Los controles principales En el anterior capítulo se han estudiado las clases principales para el diseño de aplicaciones Windows. A continuación se describen los controles más utilizados para este tipo de aplicaciones.

Las clases RadioButton y CheckBox La clase base de estos dos controles, al igual que el de la clase Button es ButtonBase. El control RadioButton se utiliza cuando se pretende elegir una única opción entre varias. Un buen ejemplo lo constituye un formulario en que el usuario debe elegir, al rellenar sus datos personales, si es hombre o mujer. Un RadioButton sólo puede tener dos estados: seleccionado o no seleccionado. Los controles RadioButton deben ser mutuamente excluyentes entre sí. Esto se consigue haciendo que pertenezcan a una misma unidad “lógica” por medio de un control GroupBox, o bien, si únicamente es una unidad, el formulario que los contiene los agrupa. Para hacer esto, se ubica en primer lugar en el formulario el control GroupBox y posteriormente, se van colocando en su interior los controles RadioButton que deban estar ligados entre sí. Si no se hace de esta manera, pueden elegirse varias opciones RadioButton de manera simultánea, es decir, no serán excluyentes entre sí. Un CheckBox permite elegir varias opciones que no sean mutuamente excluyentes. Un buen ejemplo, es un formulario en el que se pregunte acerca de los idiomas que se habla. A diferencia de un RadioButton, este control puede tener tres estado: seleccionado, no seleccionado e inhabilitado, que es un estado en el cual el control se dibuja en gris y no tiene ningún efecto hacer click sobre él. A continuación se estudian las propiedades y eventos más importantes y se realizará un sencillo ejemplo.

Propiedades

Appearance Define la apariencia del control, bien con apariencia estándar o bien con apariencia de un botón en 3D.

AutoCheck Hace que el control cambie de estado siempre que se haga click sobre él.

Checked Indica si el control está en estado seleccionado o no. CheckState Indica el estado de selección del control. Sólo para el CheckBox. Puede

ser Unchecked, Checked o Indeterminate. En este último, el control se dibuja en gris.

ThreeState (Sólo CheckBox) Propiedad booleana. A False no se permite el estado Indeterminate. A True, se permiten los tres estados

1/48

Page 2: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Eventos

Los eventos más utilizados – por supuesto que también son eventos de estos controles todos los que se derivan de la clase Control- son los siguientes: CheckedChanged Ocurre cuando cambia la propiedad Checked. Es el evento por

defecto. Click Ocurre al realizar un click de ratón sobre el control. CheckedStateChanged Ocurre cuando cambia la propiedad CheckedState (Sólo

CheckBox)

La clase GroupBox

Cuando se coloca sobre un formulario un control, el formulario es el padre –parent- de ese control y éste es “hijo”. Algunas de las propiedades del formulario –tipos de letra, colores, etc...- pasan de manera automática del “padre” al “hijo”. Si se cambian en el padre, cambiarán también en el hijo. Sólo si se cambian éstas propiedades en el hijo, dejarán de tener el mismo comportamiento que en el padre. Lo mismo ocurre cuando se sitúan una serie de controles en un control GroupBox. Éste es el padre de todos los controles que se sitúen en él y su comportamiento en algunas propiedades es idéntico. Por eso, cuando se mueve un control GroupBox, se desplazan también con él todos los controles que contiene. Si se inhabilita un control GroupBox, todos los controles “hijo” se inhabilitarán con él. Lo mismo sucede al cambiar el color del fondo o el tipo de letra. Estos controles se utilizan para agrupar controles. Si contiene controles RadioButton, serán mutuamente excluyentes entre sí. No se estudian aquí ninguna propiedad porque las hereda todas de la clase Control.

La clase ToolTip En general, las aplicaciones más recientes incorporan una pequeña etiqueta autoexplicativa de la funcionalidad de los controles cuando se deja el ratón inmóvil sobre ellos durante un breve espacio de tiempo. Es muy sencillo añadir esta característica a las aplicaciones de Windows. Para ello, se debe añadir un control ToolTip al formulario y de manera automática se añade una nueva propiedad en todos los controles de ese formulario denominada “ToolTip on ...”. Basta entonces con definir un texto en la ventana de propiedades de cada control. Cuando se ejecute la aplicación, se habrá añadido esta característica. Son pocas las propiedades y métodos de esta aplicación y no se suelen modificar. Las más importantes de esta clase son:

2/48

Page 3: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Propiedades

Active Define si el control está activo o no. AutomaticDelay Es el tiempo en milisegundos, que transcurre antes de que

se visualice la etiqueta. AutoPopDelay Es el tiempo en milisegundos, que permanece visible la

etiqueta. InitialDelay Es el tiempo en milisegundos, que el cursor debe estar

inmóvil para que se visualice la etiqueta. ReshowDelay Es el tiempo en milisegundos, que transcurre antes de que

se visualice la etiqueta cuando se pasa de una región a otra.

Métodos

string GetToolTip(Control c) Obtiene el texto de un ToolTip asociado a

un determinado control. SetToolTip(Control c, straing str) Define el texto de un ToolTip asociado a

un determinado control. Observación: la clase ToolTip no deriva de la clase Control, sino de la clase Component.

Las clases ListBox y CheckListBox

Un control ListBox permite presentar una lista de elementos que el usuario puede seleccionar pulsando con el ratón o con el teclado. Tiene dos modos de selección: simple o múltiple. El modo selección se define en la propiedad SelectionMode. Puede también tener una o varias columnas -propiedad MultiColumn -

Un control CheckListBox es una lista que tiene un control CheckBox en la parte izquierda de cada elemento, indicando si está seleccionado o no. Un ejemplo es el de la figura 16.8.

Estas dos clases se estudian juntas porque su funcionalidad es muy parecida y, por lo tanto, coinciden muchas de sus propiedades y eventos.

La jerarquía de clases es la de la figura 16.1:

3/48

ListControl

ListBox ComboBox

Control

Page 4: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Figura 16.1

Las propiedades Items, SelectedItems y SelectedIndices dan acceso a las tres colecciones que controlan la información de un ListBox, que son las que a continuación se indican:

ListBox.ObjectCollection Es la colección que contiene todos los elementos del control ListBox.

ListBox.SelectedObjectCollection Es la colección que contiene todos los elementos seleccionados del control ListBox.

ListBox.SelectedIndexCollection Es la colección que contiene todos los índices de los elementos seleccionados.

Suponga, por ejemplo, que se tiene un ListBox con los cinco elementos de la tabla siguiente.

Indice Item Estado en el ListBox 0 objeto1 No seleccionado 1 objeto2 Seleccionado 2 objeto3 No seleccionado 3 objeto4 Seleccionado 4 objeto5 Seleccionado

La colección ListBox.ObjectCollection contiene los cinco objetos.

La colección ListBox.SelectedObjectCollection almacena los siguientes objetos:

Indice Item 0 objeto2 1 objeto4 2 objeto5

La colección ListBox.SelectedIndexCollection almacena los siguientes índices:

Indice Indice del elemento0 2

4/48

Page 5: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

1 4 2 5

Los métodos comunes a todas las colecciones –Add, Remove, Insert, etc- permiten trabajar con este control de una manera muy sencilla. A continuación se especifican las propiedades más importantes:

Propiedades

Items Es la colección que contiene todos los items o elementos de la lista. Esta propiedad se utiliza para añadir, insertar o eliminar elementos de la lista, por medio de los métodos Add, Insert, Remove, etc... En tiempo de diseño tiene un editor de la colección, para añadir, insertar o eliminar los elementos que estarán presente es al comienzo de la ejecución de la aplicación.

SelectedIndex Es un valor entero que indica el índice del elemento seleccionado. Si su valor es –1, no hay ningún elemento seleccionado.

SelectedItem Es el item o elemento seleccionado en la lista. SelectedIndices Devuelve una colección con una lista de índices de los elementos de

la lista seleccionados. SelectedItems Devuelve una lista de los elementos o items seleccionados. SelectionMode Indica el modo de selección de la lista. Tiene cuatro posibles

valores: None: No se puede seleccionar ningún item. One: Sólo es posible seleccionar un elemento. MultipleSimple: se pueden seleccionar varios items de manera simultánea MultiExtended: Igual que la anterior, pero el usuario puede utilizar las teclas CTRL, SHIFT y las flechas para hacer sus selecciones.

MultiColumn Define el número de columnas de la lista. ColumnWidth En una lista de varias columna, esta propiedad define el ancho de

ellas Sorted Propiedad booleana que indica si la lista está ordenada por orden

alfabético. Además de estas propiedades, la clase CheckListBox tiene otras cuatro importantes propiedades que se explican a continuación. CheckedIndices Es una colección que contiene los elementos de la lista que están

en estado Checked o Indeterminate. CheckedItems Es la colección de los elementos de la lista que están en estado

Checked o Indeterminate. CheckedOnClick Propiedad booleana que indica si un item cambiará de estado

cuando el usuario pulse con el ratón en él. ThreeDCheckBoxes Indica si la apariencia del control es 3D

Métodos

5/48

Page 6: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Hay varios métodos muy interesantes a la hora de trabajar con estos controles. ClearSelected() Anula la selección de la lista FindString(string str) Busca la primera cadena de la lista que comience

con el string especificado. FindStringExact(string str) Busca la primera cadena que coincida con la cadena

especificada. GetSelected(int n) Devuelve un valor booleano indicando si el item n

está seleccionado. SetSelected(int n, bool b) Selecciona o anula la selección del elemento de

índice n dependiendo del valor booleano pasado, b. GetItemChecked(int n) Devuelve un valor booleano indicando si el item n

está o no seleccionado. (Sólo CheckListBox) GetItemCheckState(int n) Devuelve un valor indicando el estado del item n.

(Sólo CheckListBox)

Eventos

Además del resto de los eventos que heredan de la clase Control, estas clases tienen dos eventos específicos: ItemCheck Ocurre cuando cambia el estado de uno de los elemento de la

lista. SelectedIndexChanged Ocurre cuando cambia el índice del elemento seleccionado.

Es el evento por defecto.

Ejemplo: trabajando con el control ListBox.

6/48

Page 7: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Figura 16.2 Se trata de una aplicación que tiene dos controles ListBox, de nombres lbI y lbD, dos cajas de texto, con propiedades Name textoI y textoD y siete botones, cuatro de ellos para intercambiar elementos entre las listas, de propiedad Name btnD, btnDD, btnII y btnI, y de propiedades Text >, >>, << y <, dos más para añadir elementos a las listas, de propiedad Name btnAnadirI y btnAnadirD y de propiedad Text Añadir y un botón que servirá para terminar la aplicación de propiedad Name btnCerrar y propiedad Text Cerrar. La aplicación debe realizar las siguientes tareas:

• Añadir los nombres de ciudades escritos en las cajas de texto textoI o textoD situados en la parte inferior de los ListBox al pulsar los botones btnAñadirI o btnAñadirD respectivamente.

• Si se selecciona una ciudad en el ListBox de la izquierda y se pulsa el botón “>” o “<” dicho elemento pasará de una lista a otra.

• Si se pulsa “>>” o “<<” pasan todos los elementos a la otra lista. • Haciendo doble click en una lista, pasa el elemento que se ha pulsado a la otra

lista. • Pulsando el botón “Cerrar”, concluye la aplicación.

En primer lugar hay que diseñar gráficamente la aplicación y asignar las propiedades Name y Text correspondientes y a continuación escribir el código de los distintos eventos.

7/48

Page 8: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Utilizando el editor que proporciona este control –pulse sobre los puntos suspensivos correspondientes a la propiedad Items del ListBox- escriba algunos elementos, para que estén presentes al comienzo de la aplicación (Figura 16.2).

a) El botón btnAnadirD debe: • Recoger el texto en la propiedad Text de la caja textoI y añadirlo al lbI

con el método Add de Items. • Borrar el texto de la caja de texto • Devolver el foco a la caja de texto. El código correspondiente es: lbI.Items.Add(textoI.Text);

textoI.Clear(); textoI.Focus();

b) Botón btnD:

//Se recoge el elemento seleccionado en el lbI con la propiedad SelectedItem //y se añade al lbD con el método Add de Items lbD.Items.Add(lbI.SelectedItem); //Se borra el elemento seleccionado, con el método Remove de

Items lbI.Items.Remove(lbD.SelectedItem);

c) Botón btnDD:

• Se recogen en un array de objetos todos los elementos de la lbI con la propiedad All de Items.

• Se recorre el array y se van añadiendo al lbD,con la propiedad Add de Items. • Se borran todos los elementos del lbI con el método Clear de Items. object[] arrayObjetos=lbI.Items.All;

foreach(object i in arrayObjetos)

{ lbD.Items.Add(i); }

lbI.Items.Clear();

d) Evento doble-click en la lista lbI: El código será el mismo que el del botón btnD, así que en lugar de escribirlo de nuevo, se selecciona el evento doble-click del lbI y se selecciona el evento de nombre btnD_Click.

e) Para cerrar la aplicación, basta incluir el código siguiente del btnCerrar:

Application.Exit();

Los códigos de los demás botones y el hecho de considerar la posibilidad de que se pulse el btnD –por ejemplo- sin estar seleccionado ningún elemento de la lista -que lleva consigo un error en tiempo de ejecución se dejan al lector.

8/48

Page 9: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Se propone también la realización de esta misma aplicación pero en donde se permita la selección múltiple en los ListBox. Más adelante, al explicar la clase StatusBar se realiza un ejemplo que utiliza la clase CheckListBox.

La clase ComboBox Al igual que la clase ListBox, esta clase deriva de la clase ListControl. El control correspondiente a esta clase combina tres controles: un TextBox, un Button y un ListBox. En este control la selección no puede ser múltiple y es posible, dependiendo del valor de algunas propiedades añadir elementos a través del TextBox. Generalmente se utiliza para seleccionar una entrada del usuario, pero ahorrando espacio en el formulario. Al hacer click en la flecha del ComboBox se despliega la lista y es posible hacer la selección. También se puede trabajar con el teclado.

Propiedades

Muchas de las propiedades coinciden con las de un TextBox y las de un ListBox. Por esto, la lista de propiedades de este control es muy extensa. Se señalan aquí las más comunes y utilizadas. DropownStyle Especifica uno de los tres modos de presentación del control:

• DropDown: Se puede editar el TextBox y al pulsar la flecha del control, se despliega la lista.

• Simple: igual a DropDown, excepto que se despliega la lista de manera parecida a un ListBox.

• DropDownList: No puede editarse el TextBox y al pulsarse la flecha del control se despliega la lista.

DroppedDown Propiedad booleana. Indica si el ComboBox está o no desplegado Items Es la colección de todos los elementos del control. A través de ella,

pueden añadirse o eliminarse elementos de la lista. En tiempo de diseño, tiene un editor para añadir de manera muy sencilla elementos a la colección y por lo tanto al control.

MaxLength Especifica el número de caracteres que es posible introducir en el TextBox del control.

SelectedIndex Indica el índice del elemento seleccionado. SelectedItem Indica el elemento seleccionado. SelectedText Es el texto seleccionado en el TextBox de la lista. SelectionStart Es el índice del primer carácter seleccionado en el TextBox. SelectionLength Es la longitud del texto seleccionado en el TexBox Sorted Propiedad booleana que indica si los elemento del control están

ordenados.

Eventos

9/48

Page 10: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Los eventos principales –además de los heredados de Control- son: DropDown Ocurre cuando la lista del ComboBox se despliega SelectedIndexChanged Ocurre cuando cambia la selección de la lista. TextChanged Ocurre cuando cambia la propiedad Text cambia

Ejemplo: trabajando con el control ComboBox.

• Cree un nuevo proyecto denominado ProyectoComboBox • Añada un control ComboBox con las siguientes propiedades:

Name: cbFutbol Items: Pulse en los puntos suspensivos y aparecerá el editor de la figura 16.3:

Figura 16.3 Añada unos cuantos equipos de fútbol.

• Escriba en el constructor del formulario código para seleccionar uno de ellos. En este caso, se selecciona el primero –índice 0-.

public Form1()

{ InitializeComponent(); cbFutbol.SelectedIndex=0; lEquipo.Text=cbFutbol.SelectedItem.ToString();

}

10/48

Page 11: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

a) Añada una etiqueta y cambie sus propiedades: Name: lEquipo Text: (Vacío) La ubicación de los elementos debe ser parecida a la de la figura 16.4:

Figura 16.4

b) Se pretende que cuando el usuario cambie la selección en el ComboBox, el texto del elemento elegido se asigne a la propiedad Text de la etiqueta. Para ello, escriba el siguiente código en el método cbFutbol_SelectedIndexChanged que será el que maneje el evento SelectedIndexChanged: private void cbFutbol_SelectedIndexChanged(object sender,

System.EventArgs e)

{ lEquipo.Text = cbFutbol.SelectedItem.ToString();

}

11/48

Page 12: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Las clases NumericUpDown y DomainUpDown Son dos clases que permiten recorrer una lista de cadenas (DomainUpDown) o de números (NumericUpDown) para que el usuario realice una elección. Se recorre la lista de los valores por medio de un par de pequeños botones que indican si el desplazamientoes hacia arriba o hacia abajo. Un ejemplo de utilización de estos controles lo constituye la pantalla para configurar la impresión de documentos en Microsoft Word, en la opción número de copias que se desean hacer (figura 16.5). Se permite al usuario escribir el número en el control o bien, sin tener que utilizar el teclado, realizar la selección con pulsaciones sobre las flechas.

Figura 16.5 DomainUpDown y NumericUpDown derivan de una clase común llamada UpDownBase que proporciona la funcionalidad básica a ambas. A su vez, ésta deriva de la clase ScrollableControl y ésta de Control. Por lo tanto, sus miembros son comunes a ambas.

Propiedades

• Propiedades de UpDownBase:

12/48

Page 13: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

bool InterceptArrowKeys Indica si el usuario puede utilizar o no las

flechas para seleccionar valores. bool ReadOnly Indica si el usuario puede introducir un dato

para cambiar el texto del control escribiendo con el teclado.

string Text Texto del control • Propiedades DomainUpDown DomainUpDownItemCollection Items Colección de los elementos del control int SelectedIndex Índice del elemento seleccionado object SelectedItem Elemento seleccionado bool Sorted Indica si los elementos están ordenados. • Propiedades de NumericUpDown int DecimalPlaces bool ThousandsSeparator bool Hexadecimal

Configuran la presentación del número en el control.

decimal Increment Incremento al pulsar el control. Por defecto es 1.

decimal Minimun decimal Maximun

Valores máximo y mínimos

decimal Value Valor del texto del control Se realiza un ejemplo con este control más adelante, al explicar el control TabControl.

La clase Panel Esta clase deriva de la clase ScrollableControl y ésta de la clase Control.

Un panel es un control que puede contener a otros controles. Se puede utilizar un panel para agrupar colecciones de controles como RadioButton. Como otros controles contenedores, si su propiedad Enabled es false, los controles que contiene también tendrán esa propiedad a false.

Por defecto, se presenta sin bordes, aunque pueden definirse por medio de su propiedad BorderStyle.

Panel deriva de la clase ScrollableControl y por ello proporciona la propiedad AutoScroll para disponer de barras de desplazamiento en el panel si se desea. Esto es muy útil cuando se tienen muchos controles y no pueden contenerse todos en un formulario por falta de espacio físico en la ventana que los contiene o bien si se tiene una imagen que ocupa una superficie mayor que el control que lo contiene. Esta es la

13/48

Page 14: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

gran diferencia con un control GroupBox. Sin embargo, la funcionalidad de ambas es igual ya que ambas se utilizan como contenedores de controles. La clase StatusBar (Barra de estado) El control StatusBar o barra de estado, se utiliza generalmente para proporcionar información al usuario acerca del estado de la aplicación. Dicha información se puede dividir en paneles. Puede tener tantos paneles como se desee y en ellos se puede presentar texto o imágenes (figura 16.6). Un ejemplo muy corriente lo constituye la barra de estado del procesador de texto Word de Microsoft, donde se informa de la página, la sección, el número total de páginas, la línea y columna dentro de la página actual, etc... Aunque generalmente se coloca en la parte inferior del un formulario, puede situarse en cualquier otro lugar.

Figura 16.6 Esta clase deriva directamente de la clase Control.

La clase StatusBar se usa para crear una barra de estado y la clase StatusBarPanel para crear paneles de la barra de estado.

//Se crean una barra de estado y dos paneles

this.statusBar1 = new System.Windows.Forms.StatusBar(); StatusBarPanel panel1 = new StatusBarPanel(); StatusBarPanel panel2 = new StatusBarPanel();

Para añadir paneles a la barra de estado, se ha de llamar al método

StatusBar.Panels.AddRange. Por ejemplo:

14/48

Page 15: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows statusBar1.Panels.AddRange( new StatusBarPanel[] {panel1, panel2});

Se puede escribir texto en una barra de estado, asignándoselo a la propiedad Text del control. Pero también es posible asignar varios paneles para presentar una información más rica en detalles. Como antes se ha mencionado, puede insertar imágenes en una barra de estado en el interior de un control Panel. Para ello, debe utilizarse la propiedad Icon del Panel.

Icon icono = new Icon(@"c:\mouse.ico"); panel1.Icon = icono;

Podría añadirse información sobre la hora en el otro panel:

panel2.Text = DateTime.Now.ToString();

Propiedades

Las propiedades más importantes de esta clase son las siguientes: Panels De sólo lectura. Es la colección de paneles de la barra de

herramientas. Se utiliza para añadir o eliminar elementos del control. En tiempo de diseño se proporciona un pequeño editor que facilita enormemente la tarea de especificar el comportamiento de cada panel. Para llamar a cada panel, se puede hacer por su nombre o bien por medio de su índice: Panel[0], Panel[1],... El texto de cualquiera de ellos lo define la propiedad Text: Panel[0].Text, Panel[1].Text, etc. (Figura16.7)

BacgroundImage Es posible asignar una imagen de fondo al control a través de esta propiedad.

ShowPanels Propiedad booleana que permite o anula la posibilidad de presentar paneles en la barra.

Text Es el texto que aparece en la barra de herramientas, sólo en el caso de que no haya paneles.

Eventos

No se suelen utilizar eventos en este control, aunque si se pretende dibujar un control manualmente, son necesarios los siguientes: DrawItem Ocurre cuando el panel que tiene el estilo OwnerDraw necesita ser

redibujado Panel_Click Cuando se hace click sobre un panel de la barra de estado Para dibujar manualmente un panel es necesario tener la propiedad Style del panel a OwnerDraw y escribir el código en el evento DrawItem.

15/48

Page 16: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Como anteriormente se ha dicho, cada panel de la barra de estado es un objeto o instancia de la clase StatusBarPanel. Esta clase encapsula la información referida a cada uno de los paneles de la colección de paneles. Por ejemplo, permite definir si es un simple texto o el estilo del panel o un icono.

Ejemplo: trabajando con barras de estado.

La siguiente aplicación actualiza en la barra de estado las selecciones realizadas en diferentes controles.

a) Cree un nuevo proyecto llamado ProyectoBarraDeEstado. Cambie la propiedad Name del formulario a FormularioPrincipal y modifique en el método Main() la línea Application.Run(new Form1()); por la línea: (OJO ver versión definitiva) Application.Run(new FormularioPrincipal()); Modifique la propiedad Text del formulario a “Formulario Principal”

b) Añada al formulario los siguientes controles en la posición aproximada de la figura 16.8 y con las propiedades que se indican:

• ListBox

Name: lista SelectMode: One Items: (Hacerlo con el editor)

Jaén Sevilla Granada Córdoba Cádiz Huelva Almería

• GroupBox Name: groupBox1 Text: Sexo Añada a groupBox1 los siguientes controles: RadioButton: Name: rbHombre Text: Hombre

Checked: True RadioButton: Name: rbMujer Text: Mujer Checked: False

• GroupBox Name: groupBox2 Text: Idiomas Añada a groupBox2 los siguientes controles: CheckBox:

16/48

Page 17: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Name: cbIngles Text: Inglés

Checked: False CheckBox: Name: cbFrances Text: Francés Checked: False CheckBox:

Name: cbAleman Text: Alemán Checked: False

• CheckedListBox

Name: clbLenguaje CheckedOnClick: True

Items: (Con el editor añada los siguientes strings)

Java C# Pascal Fortran Cobol C++ C

• StatusBar Name: sbEstado Panels:

(Con el editor que se proporciona) Añadir los siguientes (Ver figura) Name: sbpCiudad Name: sbpSexo Name: sbpIdioma

Name: sbpLenguaje En todos: Text: (Vacío) ShowPanel: True Autosize: False en los dos primeros y

True en los otros dos.

17/48

Page 18: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Figura 16.7

Más o menos, el aspecto final de la aplicación debe parecerse al de la figura 16.8:

Figura 16.8 c) Se van a utilizar cuatro variables privadas de tipo string para cada uno de los

paneles denominadas strCiudad, strSexo, strIdioma y strLenguaje. En el constructor del formulario se inicializan, como se indica a continuación: private string strCiudad;

private string strSexo;

18/48

Page 19: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows private string strIdioma; private string strLenguaje; public FormularioPrincipal() { InitializeComponent(); strCiudad="Jaén"; strSexo="Hombre"; strIdioma="Ninguno"; strLenguaje="Ninguno"; lista.SelectedIndex=0; ActualizarBarra();

} En la última línea, se añade un método que recoge la selección de cada control y la escribe en cada panel. Su código es: public void ActualizarBarra()

{ sbEstado.Panels[0].Text=strCiudad; sbEstado.Panels[1].Text=strSexo; sbEstado.Panels[2].Text=strIdioma; sbEstado.Panels[3].Text=strLenguaje;

}

d) Para recoger el ítem cada vez que se cambie la selección de la lista se debe tratar el evento SelectedIndexChanged. Escriba el siguiente código

private void lista_SelectedIndexChanged(object sender, EventArgs

e) { strCiudad=lista.SelectedItem.ToString(); ActualizarBarra();

}

e) En los controles RadioButton, se obtiene el elemento seleccionado tratando el evento CheckedChanged. Este método trata el cambio de estado en cualquiera de los dos controles y por eso, hay que definir el mismo método para los dos. En este caso se ha dado a los dos el nombre del primero de ellos rbHombre_CheckedChanged:

private void rbHombre_CheckedChanged(object sender, EventArgs e)

{ if(rbHombre.Checked) strSexo=rbHombre.Text; else strSexo=rbMujer.Text; ActualizarBarra();

}

f) La misma idea se utilizará para los siguientes controles CheckBox. El método común que tratará a los tres controles se llamará cb_CheckedChanged.

private void cb_CheckedChanged(object sender, System.EventArgs

e) { strIdioma="";

19/48

Page 20: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows if(cbIngles.Checked) strIdioma+=cbIngles.Text+" "; if(cbFrances.Checked) strIdioma+=cbFrances.Text+ " "; if(cbAleman.Checked) strIdioma+=cbAleman.Text; ActualizarBarra();

}

g) Por último, se recogen las elecciones en el control CheckListBox, tratando el evento SelectedIndexChanged mediante el método clbLenguaje_SelectedIndexChanged private void clbLenguaje_SelectedIndexChanged(object sender,

System.EventArgs e)

{ strLenguaje=""; foreach(string str in clbLenguaje.CheckedItems) strLenguaje+=str + " "; ActualizarBarra();

} En este método se recorre toda la colección de los items que tienen el estado a Checked y se añade su texto al string correspondiente. Luego se actualiza la barra.

La clase TabControl Es un control que se utiliza cuando se quiere organizar mucha información de manera relacionada. Un buen ejemplo lo constituye, la ventana de opciones de Microsoft Word (figura 16.9).

20/48

Page 21: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Figura 16.9: ventana de opciones de Microsoft Word. Este control tiene varios TabPage o pestañas que trabajan de manera similar a un GroupBox. Para utilizar este control, se deben añadir el número de pestañas que se deseen a una colección del control llamada TabPages. Visual Studio proporciona un editor para añadir o eliminar las pestañas de la colección de manera gráfica, rápida e intuitiva. Se puede acceder a él a través de la propiedad TabPages del control. Posteriormente se van colocando los controles en cada pestaña.

Propiedades

Las propiedades más importantes son: Alignment Determina si las etiquetas son desplegadas en la parte

superior, izquierda, derecha o inferior –opciones Top, Left, Rigth y Bottom- del control.

Appearance Determina la apariencia de las etiquetas: botones 3D, botones estándar o pestañas normales.

HotTrack Propiedad booleana. Indica si la apariencia de la pestaña cambia al pasar con el ratón sobre el nombre de la pestaña.

RowCount Número de filas de etiquetas en el control. TabCount Número de etiquetas del control TabPages Colección de pestañas. Se utiliza para añadir o eliminar

21/48

Page 22: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

elementos del control.

Además de lo indicado hasta el momento es importante recalcar que cada pestaña trabaja como un contenedor de controles –como un GroupBox- y no como formularios distintos. Por eso, puede accederse desde un control de una pestaña a otro control de otra pestaña, cosa que no se puede hacer entre dos formularios diferentes. Sin embargo, lo más habitual será situar este control en una caja de diálogo y pasar los datos que se hayan seleccionado al formulario.

Ejemplo: trabajando con el control TabControl.

Esta aplicación –figura 16.10– simula la configuración de la impresión. En este ejemplo, sólo se intenta que la configuración elegida se presente en los controles de texto de la parte derecha de la ventana y no configura la impresión.

a) Cree un nuevo proyecto que se llame ProyectoTabControl b) Modifique las propiedades del formulario:

Name: formOpciones Text: Opciones de configuración Modifique la línea del método Main()

Application.Run(new Form1()); por la línea

Application.Run(new FormOpciones());

Figura 16.10

22/48

Page 23: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

c) Añada un control TabControl al formulario y modifique su propiedad Name a

tcOpciones (figura 16.10). d) Pulse sobre la propiedad TabPages y trabaje con el editor de las páginas del

control para añadir dos pestañas (figura 16.11).

Figura 16.11 Pulse sucesivamente el botón Agregar cada vez que desee añadir una pestaña. Si se equivoca siempre puede pulsar el botón Eliminar y comenzar de nuevo. Name: tpImprimir Text: Imprimir Name: tpOrtografia Text: Ortografía e) Cierre la ventana del editor. A continuación, desde la ventana de diseño, en la

primera etiqueta vaya añadiendo los controles que se indican situándolos aproximadamente en posiciones que se aproximen a las de las figuras 16.10 y 16.12:

23/48

Page 24: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Figura 16.12

e.1) En la TabPage tpImprimir, añada los controles siguientes: • GroupBox

• Name: groupBox1 • Text: Impresora En groupBox1 sitúe tres etiquetas y un ComboBox con las propiedades: o Label

Name: label1 Text: Nombre Autosize: True

o Label Name: lTipoDeImpresora Text: Tipo Autosize: True

o Label Name: label3 Text: (Vacío) Autosize: False

o ComboBox Name: cbImpresoras Text: HP LaserJet 1100 Items: HP LaserJet 1100

Canon Jet BCJ 4000 HP DeskJet 843C

• GroupBox

24/48

Page 25: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

• Name: groupBox2 • Text: Intervalo de páginas En groupBox2 sitúe cuatro RadioButton y un TextBox con las propiedades: • RadioButton

o Name: rbTodo o Checked: True o Text: Todo

• RadioButton o Name: rbPaginaActual o Checked: False o Text: Página actual

• RadioButton o Name: rbPaginas o Checked: False o Text: Páginas

• RadioButton o Name: rbSeleccion o Checked: False o Text: Selección

• TextBox o Name: txtSeleccion o Text: (Vacío)

• GroupBox • Name: groupBox3 • Text: Copias En groupBox1 sitúe una etiqueta, tres CheckBox y un NumericUpDown:

o Label Name: label3 Text: Número de copias Autosize: True

o NumericUpDown Name: nudCopias Increment 1 Value: 1 Minimum: 1 Maximum: 100

o CheckBox Name: cbDosCaras Texto: Imprimir por las dos caras

o CheckBox Name: cbColor Texto: Imprimir en color

o CheckBox Name: cbBorrador Texto: Calidad borrador

25/48

Page 26: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

g) En la otra TabPage, tpOrtografia, añada únicamente un control CheckedListBox con las propiedades siguientes:

• CheckedListBox • Name: clbOrtografia • Items: (utilice el pequeño editor que aparece al pulsar sobre la propiedad)

Corregir uso accidental de bLOQ mYUS Corregir dos MAyusculas SEguidas Poner en mayúscula la primera letra de una oración Cambiar las b por v No cometer ninguna falta de ortografía Reemplazar mientras se escribe

ThreeDCheckBoxes:True CheckOnClick: True

h) Sitúe fuera del control TabControl, dos etiquetas explicativas de dos cajas de texto donde se escribirá la configuración seleccionada.

Label

• Name: label4 • Text: Opciones de impresión elegidas

• Label • Name: label5 • Text: Opciones de ortografía seleccionadas

• TextBox • Name: txtOpcionesImpresion • Text: (Vacío) • Multiline: True

• TextBox Name: txtOpcionesOrtografia Text: (Vacío) Multiline: True

Para actualizar las cajas de texto de la derecha. Se crean tres variables de tipo string y se les da unos valores iniciales en el constructor del formulario: //Declaracion de miembros de la Clase FormOpciones string nombreImpresora; string intervaloPaginas; string opcionesCopias; string nCopias; string strOrtografia; private System.ComponentModel.Container components = null; public FormOpciones() { nombreImpresora="HP LaserJet 1100"; intervaloPaginas=" Todo"; opcionesCopias = " "; nCopias =" 1"; strOrtografia="";

26/48

Page 27: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows InitializeComponent(); } Cree un método público que facilite la actualización de la caja de texto txtOpcionesImpresion. Este método simplemente devuelve la concatenación de los resultados de cada grupo de opciones. public string ActualizarOpciones() { return (nombreImpresora+intervaloPaginas+opcionesCopias+nCopias); }

En el evento SelectedIndexChanged del ComboBox cbImpresoras, escriba el siguiente código: private void cbImpresoras_SelectedIndexChanged(object sender,

EventArgs e) { nombreImpresora=cbImpresoras.SelectedItem.ToString(); lTipoDeImpresora.Text=nombreImpresora; txtOpcionesImpresion.Text=ActualizarOpciones(); } La primera línea recoge el ítem seleccionado como string. Después se escribe la etiqueta que recoge el resultado de la elección y posteriormente se llama al método ActualizarOpciones() para actualizar la caja de texto txtOpcionesImpresion. A continuación se escribe el código del evento CheckedChanged de los RadioButton. Para ello añada este evento en uno de los controles, con el nombre rb_CheckedChanged y escriba el siguiente código. private void rb_CheckedChanged(object sender, System.EventArgs e) { if(rbTodo.Checked) intervaloPaginas="Imprimir Todo"; else if(rbPaginaActual.Checked) intervaloPaginas="Imprimir página actual"; else if(rbPaginas.Checked) intervaloPaginas="Imprimir paginas: " + txtSeleccion.Text; else if(rbSeleccion.Checked) intervaloPaginas="Imprimir selección"; txtOpcionesImpresion.Text=ActualizarOpciones(); } Posteriormente, añada este mismo evento a los otros tres controles RadioButton, para que todos estén tratados por el mismo método manipulador. También se pretende que cuando se escriba algo en la caja de texto txtSeleccion, se seleccione el RadioButton correspondiente, rbPaginas. Para ello, escriba el siguiente código en el evento TextChanged del TextBox: private void txtSeleccion_TextChanged(object sender, System.EventArgs e)

27/48

Page 28: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows { if(txtSeleccion.Text.Length>0) rbPaginas.Checked=true; intervaloPaginas="Imprimir paginas: " + txtSeleccion.Text; txtOpcionesImpresion.Text=ActualizarOpciones(); } Se propone al lector que mejore el programa para que cuando se selcciona otro ComboBox, se borre el contenido de la caja de texto txtSeleccion. Ahora seleccione los tres controles CheckBox, y con ellos seleccionados vaya a la Ventana de propiedades, y en la pestaña correspondiente a eventos, haga doble-click sobre el evento CheckedChanged con lo que los eventos de los tres serán tratados por el mismo manipulador cbDosCaras_CheckedChanged. Esta es otra manera de hacer lo que antes se ha realizado control a control con los RadioButton. Escriba el siguiente código en el evento: private void cbDosCaras_CheckedChanged(object sender, System.EventArgs e) { opcionesCopias=""; if(cbDosCaras.Checked) opcionesCopias+=" Dos caras "; if(cbBorrador.Checked) opcionesCopias+=" borrador "; if(cbColor.Checked) opcionesCopias+=" color "; txtOpcionesImpresion.Text=ActualizarOpciones(); } Ahora añada el número de copias, del valor obtenido del control NumericUpDown. Para ello, en el evento nudCopias_ValueChanged se escribe el siguiente código: private void nudCopias_ValueChanged(object sender, System.EventArgs e) { nCopias=nudCopias.Value.ToString(); txtOpcionesImpresion.Text=ActualizarOpciones(); } Ahora ya sólo queda tratar el control situado en la otra pestaña. Se tartará el evento SelectedIndexChanged que ocurre siempre que se cambia algunos de los elementos seleccionados. Para ello, se borra la variable strOrtografia, y se recorre la colección de todos los elementos seleccionados. Se obtiene el ítem correspondiente y se almacena en la variable. Por último, se asigna a la caja de texto el contenido de la variable. private void clbOrtografía_SelectedIndexChanged(object sender,

System.EventArgs e)

{ strOrtografia=""; foreach(string item in clbOrtografía.CheckedItems) strOrtografia+=item; txtOpcionesOrtografia.Text=strOrtografia; }

28/48

Page 29: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

La clase TrackBar El control TrackBar -también llamado "slider"- se utiliza para navegar a través de una gran cantidad de información y/o para ajustar visualmente un determinado valor. Consta de dos partes: una es el propio slider o marcador y las propias marcas. El slider puede ser ajustado a un determinado valor y su posición corresponde a ese valor que se asigna a la propiedad Value. El marcador se mueve en incrementos que se pueden especificar. Las propiedades más importantes de este control son: Value, TickFrequency, Minimum, y Maximum. TickFrequency es el espaciamiento entre las marcas. Minimum y Maximum son los valores mínimo y máximo que puede representar el control.

También tienen importancia las propiedades SmallChange y LargeChange, que representan el número de posiciones que se moverá el marcador en respuesta a pulsar las teclas izquierda o derecha y PAGE UP o PAGE DOWN -y también a un click de ratón en el propio control- respectivamente.

Esta clase deriva directamente de la clase Control.

Propiedades

AutoSize Define si el control se ajusta en tamaño automáticamente.

LargeChange Valor que se añade o resta a la propiedad Value cuando se mueve el slider por un click de ratón o con las teclas AV PAG o RE PAG.

Maximum Límite superior de la propiedad Value. Minimum Límite inferior de la propiedad Value. Orientation Orientación del TrackBar SmallChange Valor que se añade o resta a la propiedad

Value cuando se mueve el slider desde el teclado con las teclas izquierda o derecha..

TickFrequency Es el incremento de valor entre las pequeñas marcas dibujadas en el control.

TickStyle Indica el modo de visualización del control.Value Es el valor numérico que representa la

posición actual del slider.

Eventos

Scroll Ocurre cuando el slider se mueve por accion del ratón o por el teclado.

ValueChanged Ocurre cuando la propiedad Value cambia.

29/48

Page 30: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Ejemplo: trabajando con el control TrackBar.

En la siguiente aplicación las cajas de texto actualizan los valores de los TrackBar en cada momento. a) Cree un nuevo proyecto denominado

BarrasDeDesplazamiento. b) Cambie el nombre del fichero Form1.cs a

FormularioPrincipal.cs pulsando en la ventana Explorador de Soluciones y cambiando la propiedad Name del archivo por el nuevo nombre.

c) Modifique el nombre de la clase Form1 a FormularioPrincipal. Para ello, pulse en la ventana Vista de clases, el ítem Form1 para que tenga el foco, cambie la propiedad Name del formulario de Form1 a FormularioPrincipal.

d) Para ver el código de la aplicación pulse con el botón derecho el formulario y escoja la opción Ver código.

e) Cambie –esto es error de la beta- la línea Application.Run(new Form1()); por la línea Application.Run(new FormularioPrincipal());

f) Establezca la siguiente propiedad del formulario FormularioPrincipal

Text: Aplicación demo de Barras de desplazamiento

g) Sitúe dos controles TrackBar, en el formulario y haga que sean más o menos del mismo tamaño. h) A los dos controles TrackBar se les asignan las siguientes propiedades:

Name: th y tv respectivamente, indicando que son dos TrackBar, uno horizontal y otro vertical.

Orientation: Horizontal y Vertical respectivamente. Definen la orientación. Maximun: 100 Valor máximo del track. Minimum: 0 Valor mínimo del track. LargeChanged: 5 Incrementos grandes de valor. SmallChanged:1 Incrementos de valor. Value: 0 Indica el valor actual del track. Inicialmente, valor 0. TickFrecuency: 5 Frecuencia de las señales dibujadas en el track. TickStyle: BottomRight Estilo de la señal que indica el valor.

i) Añada cajas de texto, del mismo tamaño, con las siguientes propiedades:

Name: txtValorBarraHorizontal y txtValorBarraVertical respectivamente. Text: 0

j) Añada dos etiquetas con las siguientes propiedades: AutoSize: True Text: Valor Barra Horizontal y Valor Barra Vertical, respectivamente

30/48

Page 31: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

k) El aspecto final de la aplicación es el de la figura 16.14: Se puede ajustar los márgenes, tamaños y posiciones relativas con los controles situados en la barra de herramientas del IDE (figura 16.13) y con Crtl+flechas de posicionamiento

Figura 16.13

Figura 16.14

l) Se pretende que cuando cambie el indicador de posición se indique su valor en los cuadros de texto. Para ello,

• Pulse sobre la barra vertical para tener el foco. • En la ventana de propiedades, doble click sobre el evento

ValueChanged del TrackBar • Escriba el siguiente código:

txtValorBarraHorizontal.Text = th.Value.ToString(); y en otro control, txtValorBarraVertical.Text = tv.Value.ToString();

De esta manera se asigna a la propiedad Text de las cajas de texto los valores de los controles trackBar cada vez que éstos cambien. Observe el lector que se utiliza el

31/48

Page 32: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

método ToString() que tiene cualquier objeto por heredarlo de la clase Object para convertir la cantidad que se obtiene de los trackBar a string. Compile y ejecute la aplicación. Se puede observar que esta aplicación queda un poco incompleta porque lo lógico sería que si el usuario cambia el valor de las cajas de texto, también cambiaran los valores en los TrackBar. Además sería conveniente controlar la entrada de la caja de texto para que sea numérica. No se ha hecho aquí para no complicar demasiado el código. Sin embargo, se realiza un ejemplo muy parecido al explicar la clase ScrollBar.

La clase ScrollBar

Muchos de los controles que precisan de barras de desplazamiento ya las proporcionan directamente. Esto sucede con los controles TextBox, ListBox y ComboBox.

Este control se utiliza en aquéllos controles que no lo proporcionan directamente, como, por ejemplo, PictureBox.

La jerarquía de esta clase es la siguiente:

Control

HScrollBar VScrollBar

ScrollBar

Figura 16.15

Propiedades

La propiedad principal es Value, que es el valor actual en la barra de desplazamiento. Además son también importantes las propiedades Minimum y Maximum que determinan el rango de los valores que el usuario puede seleccionar, LargeChange y SmallChange que definen el incremento cuando se produce incrementos grandes –por pulsación del ratón en el control- y pequeños –al pulsar en los extremos del control-.

Eventos

Scroll Ocurre cuando se mueve la barra de desplazamiento. Es el evento por defecto.

ValueChanged Ocurre cuando cambia el valor de la propiedad Value.

32/48

Page 33: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Ejemplo: trabajando con el control ScrollBar.

En esta aplicación se define el color de fondo de un panel a través de los valores numéricos correspondientes a las barras de desplazamiento (16.16).

Figura 16.16

Para ello cree un nuevo proyecto llamado DialogoColor y en el formulario principal sitúa los controles como aparecen en la figura 16.16. Asigne las siguientes propiedades:

-Formulario:

Name: FormularioColor Text: Formulario de Color FormBorderStyle: FixedDialog

Cambiar también (sólo en la versión beta) la línea de método Main(): Application.Run(new Form1()); por la línea:

33/48

Page 34: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows Application.Run(new FormularioColor()); Añada un panel, tres etiquetas, tres cajas de texto y tres barras de desplazamiento con la situación de la figura anterior y con las propiedades siguientes: -panel: Name: panel BackColor: Black -Etiquetas: Name: los que vienen por defecto, o sea, label1, label2 y label3. Autosize: true -Cajas de texto: Name: txtRojo, txtVerde y txtAzul respectivamente. Text: 0 (en las tres) -Barras de desplazamiento (ScrollBar) Name: scbRojo, scbVerde y scbAzul. LargeChanged: 10 Maximun: 255 Minimun: 0 SmallChanged: 1 Value: 0 A continuación llame al evento ValueChanged de scbRojo y llámele scb_ValueChanged. Las tres barras de desplazamiento compartirán el mismo método y código. Escriba el siguiente código: private void scb_ValueChanged(object sender, System.EventArgs e) { //Se recogen los valores de las barras de desplazamiento int nRojo=scbRojo.Value; int nVerde=scbVerde.Value; int nAzul=scbAzul.Value; //Se asignan los valores a las cajas de texto txtRojo.Text=nRojo.ToString(); txtVerde.Text=nVerde.ToString(); txtAzul.Text=nAzul.ToString();

//Se crea el color y se asigna al fondo del panel Color miColor=Color.FromArgb(nRojo,nVerde,nAzul); panel.BackColor=miColor; } En el código anterior, en primer lugar se obtienen los valores de cada una de las barras de desplazamiento y se asignan a tres variables enteras. Posteriormente, se asignan estos valores a las cajas de texto, para que haya una correspondencia entre los valores de las barras y las cantidades de las cajas de texto. A continuación, en la línea: Color miColor=Color.FromArgb(nRojo,nVerde,nAzul);

34/48

Page 35: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows se asigna al objeto miColor de la estructura Color, un color con el método estático FromArgb() que devuelve un objeto de tipo Color formado por la mezcla de los colores rojo, verde y azul en cantidades que vienen indicadas en cada uno de los tres argumentos con cantidades comprendidas entre 0 y 255. La estructura Color se trata en el capítulo dedicado al GDI. El formato de este método es: public static Color FromArgb(int rojo, int verde, int azul); Posteriormente, este color se asigna a la propiedad BackColor de panel. Hay que considerar que este código sirve para los tres controles. Para esto, debe asociarse este mismo evento de nombre scb_ValueChanged a los controles scbVerde y scbAzul. También se deben definir los eventos ValueChanged de las otras dos cajas de desplazamiento. Para ello, se debe hacer click en la ventana de propiedades del control scbVerde, en el evento ValueChanged; pulse en la parte de la derecha; sobre la flecha situada al final de la línea del evento aparece el nombre scb_ValueChanged. Pulse sobre él y de modo automático se asocia este mismo evento al control scbVerde. Realice la misma operación con el control scbAzul. Ahora hay que considerar el paso inverso. Se trata de que cuando se cambien las cantidades de las cajas de texto, se modifiquen automáticamente y se sitúen en los valores correspondientes las barras de desplazamiento y se asocie el color correspondiente a estas cantidades al panel. En este ejercicio no se van a considerar los posibles errores en la introducción de valores en las cajas de texto, para no complicar excesivamente el ejercicio. Además, se considerará que no se cambie el color hasta que no se pulse ENTER. Por eso, se trata el evento KeyPress. Como las tres cajas de texto tienen el mismo código, se compartirán el mismo nombre para las tres como se ha hecho anteriormente. Se sigue el mismo camino anterior: doble click sobre el evento KeyPress de uno de las tres cajas de texto –por ejemplo la primera y de modo automático se asocia el nombre txtRojo_KeyPress al control, ya que éste es el control por defecto de este control. Vuelva a la ventana de propiedades, y cambie el nombre por uno un poco más general, como por ejemplo, txt_KeyPress o cualquier otro. Escriba el siguiente código en la primera de las cajas de texto. private void txt_KeyPress(object sender, KeyPressEventArgs e) { //Aquí se debería controlar que la entrada sea numérica int n=int.Parse(((TextBox)sender).Text); if(n<=255 && n>=0) {

if(e.KeyChar=='\r') {

int nRojo=int.Parse(txtRojo.Text);

35/48

Page 36: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows int nVerde=int.Parse(txtVerde.Text); int nAzul=int.Parse(txtAzul.Text); scbRojo.Value=nRojo; scbVerde.Value=nVerde; scbAzul.Value=nAzul; Color miColor=Color.FromArgb(nRojo,nVerde,nAzul); panel.BackColor=miColor; } } else MessageBox.Show("Introduce un número entre 0 y 255"); } Observaciones:

a) En la línea int.Parse(txtRojo.Text); se convierte la cantidad correspondiente a la caja de texto –que es un string- a un entero.

b) Se chequea si el número introducido está entre 0 y 255 c) En la línea if(e.KeyChar=='\r') se chequea si la tecla pulsada es un ENTER,

que corresponde al carácter ‘\r’. d) Se actualizan los valores de las barras con las cantidades correspondientes de las

cajas de texto

La clase PictureBox

Un PictureBox se utiliza para visualizar gráficos: bitmaps, iconos, ficheros JPEG, GIF u otros tipos de archivos.

Esta clase deriva directamente de la clase Control.

Su propiedad Image define la imagen que se visualiza. El tamaño y posicionamiento de la imagen en el control se pueden controlar por medio de la propiedad SizeMode que puede tomar valores de la enumeración PictureBoxSizeMode. El control PictureBox se visualiza por defecto sin bordes, pero se puede modificar con la propiedad BorderStyle.

Propiedades

BorderStyle Define el borde del control. Puede ser None, FixedSimple y Fixed3D.

Image La imagen que se visualiza en el control. SizeMode Modo de posicionamiento y visualización de la imagen. A

continuación se muestran los valores que puede tomar.

Nota: Valores de la enumeración PictureBoxSizeMode:

AutoSize El tamaño del control se modifica hasta ajustarse al de la imagen. CenterImage Si la imagen es más grande que el control se visualiza en el centro

36/48

Page 37: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

de la imagen. En el caso contrario, se visualiza en el centro del control.

Normal La imagen se sitúa en la esquina superior izquierda del control. Si la imagen es más grande que el control, no se visualiza entera.

StretchImage Se modifica el tamaño de la imagen para que se ajuste al control.

Ejemplo: trabajando con barras de desplazamiento y con el control PictureBox.

Esta aplicación lee una imagen al hacer doble click sobre el formulario y cuando se cambia el tamaño del formulario se refresca la imagen. Es posible que no se entiendan bien algunas de las líneas de código, en concreto las que se refieren a la carga de la imagen. Se explicarán en detalle más adelante. Cree un nuevo proyecto denominado ProyectoScrollBar con un control PictureBox de nombre cajaImagen y con su propiedad Dock a Fill para que ocupe todo el formulario y dos barras de desplazamiento VScrollBar y HScrollBar, de nombres sbHor y sbVer y con sus propiedades Dock a Left y Bottom respectivamente. Añada un control openFileDialog al formulario y cambie su propiedad Name a dlgAbrir.

Figura 16.17

Al hacer doble click sobre el control PictureBox se carga una imagen. Para ello, escriba el siguiente código en el evento DoubleClick del PictureBox

private void cajaImagen_DoubleClick(object sender, System.EventArgs e) { // Dialogo para abrir un fichero if(dlgAbrir.ShowDialog() != DialogResult.Cancel) {

37/48

Page 38: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows // Abre la imagen en el PictureBox y la presenta cajaImagen.Image = Image.FromFile(dlgAbrir.FileName);

magen is.PresentaElScrollBar();

}

fresque la imagen. Para ello, escriba el código siguiente en el evento Resize Form1

vate void cajaImagen_Resize(object sender, System.EventArgs e)

imagen, verla si necesita scrollbars

ar(); is.Refresh();

} }

azamiento y se trata el evento Scroll de las barras. Ambas tienen el mismo evento.

vate void sbVer_Scroll(object sender, ScrollEventArgs e)

a parte

ht,

}

) se encarga de presentar las barras de desplazamiento cuando sea necesario.

lic void PresentaElScrollBar()

mage.Width) .Visible = false;

//Añade código para "ajustar" la i th

}

Se desea también que cuando cambie el tamaño del formulario, se re de .

pri{ /* Si el PictureBox tiene y refrescar la imagen*/ if(cajaImagen.Image != null) { this.PresentaElScrollB th

Además, cuando la imagen sea más pequeña que el formulario, se presentan las barras de despl

pri{ /* Crea un objeto Graphics y dibuja un de la imagen en el PictureBox. */

s(); Graphics g = cajaImagen.CreateGraphic g.DrawImage(cajaImagen.Image, new Rectangle(0, 0, cajaImagen.Width - sbHor.Heig

cajaImagen.Height - sbVer.Width), new Rectangle (sbHor.Value, sbVer.Value, cajaImagen.Width-sbHor.Height,

cajaImagen.Height-sbVer.Width), GraphicsUnit.Pixel);

El método PresentaElScrollBar(

pub{

llBar /// Si la imagen es más ancha, presenta el HScro if (cajaImagen.Width > cajaImagen.I sbHor

38/48

Page 39: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows else sbHor.Visible = true; // Si la imagen es más alta, presenta el VScrollBar

Image.Height)

sbVer.Visible = true;

ado intervalo de tiempo. No deriva de la lase Control, sino de la clase Component.

Enabled

e puede conseguir el mismo efecto con los métodos

ntervalo de tiempo en que se producirán los disparos o eventos de reloj.

Métodos

top() todo puede seer sobreescrito para una clase que derive de

Timer

de reloj se denomina el intervalo de reloj dicado.

Ejemplo: trabajando con el control

icar que es un control no visual- y cambie las siguientes propiedades del ontrol:

(intervalo de décimas de segundo)

if (cajaImagen.Height > cajaImagen..Visible = false; sbVer

else }

La clase Timer Permite que ocurra un evento cada determinc

Propiedades

Propiedad booleana que habilita o deshabilita el lanzamiento de los eventos de reloj. SStar() y Stop(). Indica, en milisegundos, el iInterval

Star() y SOnTick()

Habilitan y deshabilitan el reloj Este mé

.

Eventos

El evento Tick. Ocurre cuando transcurrein

Timer.

Esta aplicación implementa un cronómetro muy simple . Para ello, cree un nuevo proyecto para Windows. Añada a su formulario principal un control de la clase Timer –se situará en la parte inferior del IDE, fuera del formulario, para indc Name: reloj Interval: 100

39/48

Page 40: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows Enabled: true

ñada una etiqueta al formulario y cambie las propiedades siguientes:

undos ext: 0

onderán a las décimas, gundos, minutos y horas, como miembros de las clase

atic int dd=0;

l aspecto final de la aplicación será, más o menos el de la figura 16.18:

A Name: segT Defina cuatro variables estáticas, inicializadas a 0, que corresp

Form1: se static int hh=0; static int mm=0; static int ss=0; st E

Figura 16.18

continuación, escriba el siguiente código en el evento Tick loj:

o de reloj, suma una décima

o a 10 décimas 0)

décimas a cero y sumar un segundo

o a 60 segundos 0)

ndos a cero y sumar un minuto

o a 60 minutos 0)

cero, y sumar una hora

del reA

vate void reloj_Tick(object sender, System.EventArgs e) pri{ //Cada event dd++; //Si se ha llegad if(dd==1 { //poner las dd=0; ss++; //Si se ha llegad if(ss==6 { //Poner segu ss=0; mm++; //Si se ha llegad if(mm==6 { //minutos a

40/48

Page 41: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows mm=0; hh++;

hora.Text = hh.ToS

Compile y ejecute la aplicación.

} } } //Escribir la hora en el formato: hh:mm:ss:dd

tring() + ":" + mm.ToString() + ":" + ss.ToString() + ":" + dd.ToString();

}

41/48

Page 42: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

La clase DateTime Esta clase no es un control pero es indispensable para trabajar con los dos controles que se van a estudiar a continuación. Un objeto de la clase DateTime encapsula información del día y la hora.

Propiedades

Date Es de tipo DateTime. Obtiene la fecha actual. Day Es de tipo entero. Obtiene el día del mes. DayOfWeek Día de la semana. DayOfYear Día del año. Hour Hora. Millisecond Milisegundos Minute Minutos. Month Mes. Second Segundos. Ticks Número de veces que han pasado intervalos de 100

nanosegundos. TimeOfDay Hora dentro del día. Year Año.

• Propiedades estáticas: MaxValue Constante que representa el valor más grande posible que puede

tomar el objeto DateTime. MinValue Constante que representa el valor más pequeño posible que puede

tomar el objeto DateTime Now Objeto DateTime que encapsula la hora actual del ordenador. Today Objeto DateTime con la fecha actual.

Métodos

ToLongDateString(),ToLongTimeString(), ToShortDateString(),ToShortDateString(),ToShortTimeString(), ToString()

Convierten la fecha o la hora a distintos formatos de cadena.

• Métodos estáticos:

DaysInMonth Número de días de un determinado mes de un año concreto.

Ejemplo: trabajando con la clase DateTime.

42/48

Page 43: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

Esta aplicación presenta en pantalla los distintos formatos de esta clase. Para ello, se asignan a la propiedad Text de cada una de las diez cajas de texto un formato de la fecha u hora distintos (figura 16.19). Previamente, se crea un objeto de la clase DateTime: public Form1() { InitializeComponent(); //Se crea un objeto de tipo DateTime con el día y hora actual DateTime ahora=DateTime.Now; //Se presenta en pantalla en 10 cajas de texto

textBox1.Text=ahora.Date.ToString(); textBox2.Text=ahora.ToString(); textBox3.Text=ahora.ToLongDateString(); textBox4.Text=ahora.ToLongTimeString(); textBox5.Text=ahora.ToShortDateString(); textBox6.Text=ahora.ToShortTimeString(); textBox7.Text=ahora.Day.ToString(); textBox8.Text=ahora.Month.ToString(); textBox9.Text=ahora.Year.ToString(); textBox10.Text=ahora.Hour.ToString(); }

Figura 16.19

43/48

Page 44: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

La clase DateTimePicker Se utiliza para seleccionar una determinada fecha, de manera gráfica. Esta clase deriva directamente de la clase Control. Es un control mezcla de un control ComboBox que contiene una determinada fecha y un calendario –que se estudiará posteriormente- (figura 16.20).

Figura 16.20

C# permite trabajar de una manera muy flexible con los formatos de fecha y hora. La propiedad CustomFormat permite definir el formato de la presentación en el control. Se debe encerrar entre comillas simples las letras “reservadas” de esta propiedad que son d (día) m(mes) y(año) h(horas) m(minutos) s(segundos) así como : y /. Para que tenga validez el formato, el valor de la propiedad Format debe ser Custom. Por ejemplo, para presentar en pantalla dia 06/01/2001 a las 11:34 basta con poner la propiedad CustomFormat el string: 'd'ia dd'/'mm'/'yyyy a la's' hh':'mm.

Para más información, véase la ayuda: “Date and Time Format Strings”.

Propiedades

CalendarFont CalendarForeColor CalendarMonthBackground CalendarTitleBackColor CalendarTitleForeColor CalendarTrailingForeColor

Propiedades para el diseño gráfico del control. Con ellas se puede definir el tipo de letra y su color, así como el color de fondo del control y del calendario que se despliega.

Checked Cuando la propiedad ShowCheckBox es trueindica el estado del control CheckBox adjunto a la fecha

CustomFormat Define el formato personalizado de la fecha y/o la hora.

44/48

Page 45: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

DropDownAlign Indica si la lista que se despliega estará alineada a la izquierda o a la derecha.

Format Indica el formato de la hora. Si se desea un formato personalizado, debe elegirse el valor Custom y debe definirse dicho formato en la propiedad CustomFormat,

MaxDate MinDate

Define las fechas límites que se pueden seleccionar en este control.

ShowCheckBox Valor booleano que indica si se adjunta o no un control CheckBox en el control.

ShowUpDown Indica si se utiliza un control up-down para selecionar la fecha o un ComboBox que despliegue un calendario.

Value Es el valor fecha y hora asignado al control.

Eventos

CloseUp Ocurre cuando se cierra el calendario asociado al control. DropDown Ocurre cuando se despliega el calendario asociado al control. ValueChanged Ocurre cuando cambia la propiedad Value, es decir, cuando se

selecciona un fecha diferente a la actual. Es el evento por defecto del control.

45/48

Page 46: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

La clase MonthCalendar Esta clase también deriva directamente de la clase Control. El control correspondiente a la clase MonthCalendar permite seleccionar una fecha o un rango de días de manera visual. Mediante las propiedades MinDate y MaxDate se puede limitar el abanico de fechas a elegir.

Es posible modificar el aspecto gráfico del calendario cambiando los valores de las propiedades ForeColor, TitleBackColor, TitleForeColor, TrailingForeColor y BackColor.

Muchas veces es más sencillo utilizar un control DateTimePicker en lugar de MonthCalendar si no se pretende trabajar con un rango de días.

Propiedades

DateTime[] BoldedDates Es el array de objetos de tipo DateTime que determina los días señalados en negrita.

CalendarDimensions El número de filas y de columnas que tiene el control.

Day FirstDayOfWeek Define el primer día de la semana. Por defecto es Day.Default

DateTime MaxDate El día más lejano del futuro que es posible seleccionar.

int MaxSelectionCount El máximo número de días que es posible seleccionar. Por defecto es 7.

DateTime MinDate El día más lejano del pasado que es posible seleccionar.

DateTime[]MonthlyBoldedDates int ScrollChange

Cambio de meses al hacer un scroll en el control.

DateTime SelectionEnd Es el día final del rango de días seleccionado.

SelectionRange SelectionRange Devuelve un objeto de la clase SelectionRange. Esta clase representa el rango de días seleccionado. Tiene dos propiedades: Start y End, que son dos objetos de la clase DateTime, que indican la fecha de comienzo y la de final del rango. Si sólo se selecciona un día Start y End son iguales.

DateTime SelectionStart Define la fecha de comienzo en la selección de un rango de días.

boolean ShowToday Indica si la fecha representada en la propiedad TodayDate se presenta en la parte inferior del control.

boolean ShowTodayCircle Indica si se rodea con un pequeño círculo la fecha actual.

boolean ShowWeekNumbers Indica si se presenta o no en el control el

46/48

Page 47: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

número de semana relativo al año. Color TitleBackColor Color de fondo del area del título del

control. Color TitleForeColor Color de la letra del título del control. DateTime TodayDate Es el valor que utiliza el control como

fecha actual. Color TrailingForeColor Color de los números de los días que no

pertenecen al mes del título del control.

Métodos

void SetDate(DateTime date)

Define la fecha actual.

void SetSelectionRange (DateTime d1, DateTime d2)

Define las fechas seleccionadas.

Ejemplo: trabajando con los controles DateTimerPicker y MonthCalendar.

En esta aplicación se actualiza el texto de una etiqueta con una fecha elegida en un control DateTimerPicker o en un control MonthCalendar y se actualiza la fecha del otro control (Figura 16.21).

Figura 16.21 Cree un nuevo proyecto, y llámele ProyectoCalendario. Añada un control DateTimerPicker y un control MonthCalendar con sus propiedad Name dtpFecha y mcCalendario respectivamente. Juegue un poco con las

47/48

Page 48: Las clases RadioButton y CheckBox - ehu.eusehu.eus/mrodriguez/archivos/csharppdf/WinForms/ControlesPrincipal... · tiempo de diseño tiene un editor de la colección, ... MultiColumn

Marco Besteiro y Miguel Rodríguez Controles Windows

propiedades que definen el “look” de los controles hasta dejar la apariencia que se desee. Añada también una etiqueta con la propiedad Name etiqueta, y su propiedad Text vacía. Se debe imprimir en la etiqueta la fecha sin incluir el año: por ejemplo, imagínese que está definiendo cumpleaños para una agenda. Para ello, implemente los eventos ValueChanged y DateChanged de los controles DateTimerPicker y MonthCalendar respectivamente con el siguiente código: private void dtpFecha_ValueChanged(object sender, EventArgs e) { DateTime hoy = dtpFecha.Value; mcCalendario.SelectionStart=mcCalendario.SelectionEnd=hoy; etiqueta.Text ="Cumpleaños de Miriam:" + hoy.Day + "/" + hoy.Month; } private void mcCalendario_DateChanged(object sender,DateRangeEventArgs e) { DateTime hoy = mcCalendario.SelectionStart; dtpFecha.Value = hoy; etiqueta.Text ="Cumpleaños de Miriam:" + hoy.Day + "/" + hoy.Month; } Compile y ejecute la aplicación

48/48