You are on page 1of 48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Los controles principales


En el anterior captulo se han estudiado las clases principales para el diseo de
aplicaciones Windows. A continuacin se describen los controles ms 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 opcin 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 slo 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 lgica 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 simultnea, es decir, no sern 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 ningn efecto hacer click sobre l.
A continuacin se estudian las propiedades y eventos ms importantes y se realizar un
sencillo ejemplo.

Propiedades
Appearance
AutoCheck
Checked
CheckState

ThreeState

Define la apariencia del control, bien con apariencia estndar o bien


con apariencia de un botn en 3D.
Hace que el control cambie de estado siempre que se haga click sobre
l.
Indica si el control est en estado seleccionado o no.
Indica el estado de seleccin del control. Slo para el CheckBox. Puede
ser Unchecked, Checked o Indeterminate. En este ltimo, el control
se dibuja en gris.
(Slo CheckBox) Propiedad booleana. A False no se permite el
estado Indeterminate. A True, se permiten los tres estados

1/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Eventos
Los eventos ms utilizados por supuesto que tambin 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 ratn sobre el control.
CheckedStateChanged Ocurre cuando cambia la propiedad CheckedState (Slo
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 automtica del padre al hijo. Si se cambian en el
padre, cambiarn tambin en el hijo. Slo si se cambian stas propiedades en el hijo,
dejarn de tener el mismo comportamiento que en el padre.
Lo mismo ocurre cuando se sitan una serie de controles en un control GroupBox. ste
es el padre de todos los controles que se siten en l y su comportamiento en algunas
propiedades es idntico. Por eso, cuando se mueve un control GroupBox, se desplazan
tambin con l todos los controles que contiene. Si se inhabilita un control GroupBox,
todos los controles hijo se inhabilitarn 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,
sern 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 ms recientes incorporan una pequea etiqueta
autoexplicativa de la funcionalidad de los controles cuando se deja el ratn inmvil
sobre ellos durante un breve espacio de tiempo. Es muy sencillo aadir esta
caracterstica a las aplicaciones de Windows. Para ello, se debe aadir un control
ToolTip al formulario y de manera automtica se aade 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
aplicacin, se habr aadido esta caracterstica.
Son pocas las propiedades y mtodos de esta aplicacin y no se suelen modificar. Las
ms importantes de esta clase son:

2/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Propiedades
Active
AutomaticDelay
AutoPopDelay
InitialDelay
ReshowDelay

Define si el control est activo o no.


Es el tiempo en milisegundos, que transcurre antes de que
se visualice la etiqueta.
Es el tiempo en milisegundos, que permanece visible la
etiqueta.
Es el tiempo en milisegundos, que el cursor debe estar
inmvil para que se visualice la etiqueta.
Es el tiempo en milisegundos, que transcurre antes de que
se visualice la etiqueta cuando se pasa de una regin a
otra.

Mtodos
string GetToolTip(Control c)
SetToolTip(Control c, straing str)

Obtiene el texto de un ToolTip asociado a


un determinado control.
Define el texto de un ToolTip asociado a
un determinado control.

Observacin: 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 ratn o con el teclado. Tiene dos modos de seleccin:
simple o mltiple. El modo seleccin se define en la propiedad SelectionMode. Puede
tambin 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 jerarqua de clases es la de la figura 16.1:

Control

ListControl

3/48
ListBox

ComboBox

Marco Besteiro y Miguel Rodrguez

Controles Windows

Figura 16.1

Las propiedades Items, SelectedItems y SelectedIndices dan acceso a las tres


colecciones que controlan la informacin de un ListBox, que son las que a
continuacin se indican:
ListBox.ObjectCollection

Es la coleccin que contiene todos los


elementos del control ListBox.
ListBox.SelectedObjectCollection Es la coleccin que contiene todos los
elementos seleccionados del control ListBox.
ListBox.SelectedIndexCollection Es la coleccin 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
1
2
3
4

objeto1
objeto2
objeto3
objeto4
objeto5

No seleccionado
Seleccionado
No seleccionado
Seleccionado
Seleccionado

La coleccin ListBox.ObjectCollection contiene los cinco objetos.


La coleccin ListBox.SelectedObjectCollection almacena los siguientes objetos:
Indice Item
0
1
2

objeto2
objeto4
objeto5

La coleccin ListBox.SelectedIndexCollection almacena los siguientes ndices:


Indice

Indice del elemento

4/48

Marco Besteiro y Miguel Rodrguez


1
2

Controles Windows

4
5

Los mtodos comunes a todas las colecciones Add, Remove, Insert, etc- permiten
trabajar con este control de una manera muy sencilla. A continuacin se especifican las
propiedades ms importantes:

Propiedades
Items

Es la coleccin que contiene todos los items o elementos de la lista.


Esta propiedad se utiliza para aadir, insertar o eliminar elementos
de la lista, por medio de los mtodos Add, Insert, Remove, etc... En
tiempo de diseo tiene un editor de la coleccin, para aadir,
insertar o eliminar los elementos que estarn presente es al
comienzo de la ejecucin de la aplicacin.
SelectedIndex
Es un valor entero que indica el ndice del elemento seleccionado.
Si su valor es 1, no hay ningn elemento seleccionado.
SelectedItem
Es el item o elemento seleccionado en la lista.
SelectedIndices Devuelve una coleccin 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 seleccin de la lista. Tiene cuatro posibles
valores:
None: No se puede seleccionar ningn item.
One: Slo es posible seleccionar un elemento.
MultipleSimple: se pueden seleccionar varios items de manera
simultnea
MultiExtended: Igual que la anterior, pero el usuario puede utilizar
las teclas CTRL, SHIFT y las flechas para hacer sus selecciones.
MultiColumn
Define el nmero 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
alfabtico.

Adems de estas propiedades, la clase CheckListBox tiene otras cuatro importantes


propiedades que se explican a continuacin.
CheckedIndices
CheckedItems
CheckedOnClick
ThreeDCheckBoxes

Es una coleccin que contiene los elementos de la lista que estn


en estado Checked o Indeterminate.
Es la coleccin de los elementos de la lista que estn en estado
Checked o Indeterminate.
Propiedad booleana que indica si un item cambiar de estado
cuando el usuario pulse con el ratn en l.
Indica si la apariencia del control es 3D

Mtodos

5/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Hay varios mtodos muy interesantes a la hora de trabajar con estos controles.
ClearSelected()
FindString(string str)

Anula la seleccin de la lista


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 seleccin 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. (Slo CheckListBox)
GetItemCheckState(int n)
Devuelve un valor indicando el estado del item n.
(Slo CheckListBox)

Eventos
Adems del resto de los eventos que heredan de la clase Control, estas clases tienen
dos eventos especficos:
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

Marco Besteiro y Miguel Rodrguez

Controles Windows

Figura 16.2

Se trata de una aplicacin 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 ms para aadir elementos a las listas, de
propiedad Name btnAnadirI y btnAnadirD y de propiedad Text Aadir y un botn
que servir para terminar la aplicacin de propiedad Name btnCerrar y propiedad
Text Cerrar.
La aplicacin debe realizar las siguientes tareas:
Aadir 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 btnAadirI o
btnAadirD respectivamente.
Si se selecciona una ciudad en el ListBox de la izquierda y se pulsa el botn >
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 botn Cerrar, concluye la aplicacin.

En primer lugar hay que disear grficamente la aplicacin y asignar las propiedades
Name y Text correspondientes y a continuacin escribir el cdigo de los distintos
eventos.

7/48

Marco Besteiro y Miguel Rodrguez

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 estn presentes al comienzo de la aplicacin (Figura 16.2).
a) El botn btnAnadirD debe:
Recoger el texto en la propiedad Text de la caja textoI y aadirlo al lbI
con el mtodo Add de Items.
Borrar el texto de la caja de texto
Devolver el foco a la caja de texto.
El cdigo correspondiente es:
lbI.Items.Add(textoI.Text);
textoI.Clear();
textoI.Focus();

b) Botn btnD:
//Se recoge el elemento seleccionado en el lbI con la propiedad
SelectedItem
//y se aade al lbD con el mtodo Add de Items
lbD.Items.Add(lbI.SelectedItem);
//Se borra el elemento seleccionado, con el mtodo Remove de
Items
lbI.Items.Remove(lbD.SelectedItem);

c) Botn 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 aadiendo al lbD,con la propiedad Add de Items.
Se borran todos los elementos del lbI con el mtodo 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 cdigo ser el mismo que el del botn 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 aplicacin, basta incluir el cdigo siguiente del btnCerrar:
Application.Exit();

Los cdigos de los dems botones y el hecho de considerar la posibilidad de que se


pulse el btnD por ejemplo- sin estar seleccionado ningn elemento de la lista -que
lleva consigo un error en tiempo de ejecucin se dejan al lector.

8/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Se propone tambin la realizacin de esta misma aplicacin pero en donde se permita la


seleccin mltiple en los ListBox.
Ms 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 seleccin no puede ser mltiple y es posible, dependiendo
del valor de algunas propiedades aadir elementos a travs 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 seleccin. Tambin 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 sealan aqu las ms
comunes y utilizadas.
DropownStyle

Especifica uno de los tres modos de presentacin 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 coleccin de todos los elementos del control. A travs de ella,
pueden aadirse o eliminarse elementos de la lista. En tiempo de
diseo, tiene un editor para aadir de manera muy sencilla
elementos a la coleccin y por lo tanto al control.
MaxLength
Especifica el nmero 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 carcter seleccionado en el TextBox.
SelectionLength Es la longitud del texto seleccionado en el TexBox
Sorted
Propiedad booleana que indica si los elemento del control estn
ordenados.

Eventos
9/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Los eventos principales adems de los heredados de Control- son:


DropDown
Ocurre cuando la lista del ComboBox se despliega
SelectedIndexChanged Ocurre cuando cambia la seleccin de la lista.
TextChanged
Ocurre cuando cambia la propiedad Text cambia

Ejemplo: trabajando con el control ComboBox.

Cree un nuevo proyecto denominado ProyectoComboBox


Aada 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

Aada unos cuantos equipos de ftbol.


Escriba en el constructor del formulario cdigo 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

Marco Besteiro y Miguel Rodrguez

Controles Windows

a) Aada una etiqueta y cambie sus propiedades:


Name:
Text:

lEquipo
(Vaco)

La ubicacin 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 seleccin en el ComboBox, el texto
del elemento elegido se asigne a la propiedad Text de la etiqueta. Para ello,
escriba el siguiente cdigo en el mtodo 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

Marco Besteiro y Miguel Rodrguez

Controles Windows

Las clases NumericUpDown y DomainUpDown


Son dos clases que permiten recorrer una lista de cadenas (DomainUpDown) o de
nmeros (NumericUpDown) para que el usuario realice una eleccin. Se recorre la lista
de los valores por medio de un par de pequeos botones que indican si el
desplazamientoes hacia arriba o hacia abajo.
Un ejemplo de utilizacin de estos controles lo constituye la pantalla para configurar la
impresin de documentos en Microsoft Word, en la opcin nmero de copias que se
desean hacer (figura 16.5). Se permite al usuario escribir el nmero en el control o bien,
sin tener que utilizar el teclado, realizar la seleccin con pulsaciones sobre las flechas.

Figura 16.5
DomainUpDown y NumericUpDown derivan de una clase comn llamada UpDownBase que

proporciona la funcionalidad bsica 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

Marco Besteiro y Miguel Rodrguez

bool InterceptArrowKeys

Indica si el usuario puede utilizar o no las


flechas para seleccionar valores.
Indica si el usuario puede introducir un dato
para cambiar el texto del control escribiendo
con el teclado.
Texto del control

bool ReadOnly

string Text

Propiedades DomainUpDown

DomainUpDownItemCollection Items
int SelectedIndex
object SelectedItem
bool Sorted

Controles Windows

Coleccin de los elementos del control


ndice del elemento seleccionado
Elemento seleccionado
Indica si los elementos estn ordenados.

Propiedades de NumericUpDown

int DecimalPlaces
bool ThousandsSeparator
bool Hexadecimal
decimal Increment

Configuran la presentacin del nmero en


el control.
Incremento al pulsar el control. Por
defecto es 1.
Valores mximo y mnimos

decimal Minimun
decimal Maximun
decimal Value

Valor del texto del control

Se realiza un ejemplo con este control ms adelante, al explicar el control TabControl.

La clase Panel
Esta

clase

deriva

de

la

clase

ScrollableControl

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 tambin
tendrn 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 fsico 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

Marco Besteiro y Miguel Rodrguez

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
informacin al usuario acerca del estado de la aplicacin. Dicha informacin se puede
dividir en paneles.
Puede tener tantos paneles como se desee y en ellos se puede presentar texto o imgenes
(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 pgina, la seccin, el nmero total
de pginas, la lnea y columna dentro de la pgina 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 aadir paneles a la barra de estado, se ha de llamar al mtodo


StatusBar.Panels.AddRange. Por ejemplo:

14/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

statusBar1.Panels.AddRange( new StatusBarPanel[] {panel1, panel2});

Se puede escribir texto en una barra de estado, asignndoselo a la propiedad Text del
control. Pero tambin es posible asignar varios paneles para presentar una informacin
ms rica en detalles.
Como antes se ha mencionado, puede insertar imgenes en una barra de estado en el
interior de un control Panel. Para ello, debe utilizarse la propiedad Icon del Panel.
Icon
icono
panel1.Icon = icono;

new

Icon(@"c:\mouse.ico");

Podra aadirse informacin sobre la hora en el otro panel:


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

Propiedades
Las propiedades ms importantes de esta clase son las siguientes:
Panels

De slo lectura. Es la coleccin de paneles de la barra de


herramientas. Se utiliza para aadir o eliminar elementos del control.
En tiempo de diseo se proporciona un pequeo 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 travs 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, slo 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
Panel_Click

Ocurre cuando el panel que tiene el estilo OwnerDraw necesita ser


redibujado
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 cdigo en el evento DrawItem.

15/48

Marco Besteiro y Miguel Rodrguez

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 informacin referida a
cada uno de los paneles de la coleccin 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 aplicacin 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
mtodo Main() la lnea
Application.Run(new Form1());

por la lnea: (OJO ver versin definitiva)


Application.Run(new FormularioPrincipal());

Modifique la propiedad Text del formulario a Formulario Principal


b) Aada al formulario los siguientes controles en la posicin aproximada de la
figura 16.8 y con las propiedades que se indican:

ListBox
Name:
SelectMode:
Items:

lista
One
(Hacerlo con el editor)
Jan
Sevilla
Granada
Crdoba
Cdiz
Huelva
Almera

GroupBox
Name:
groupBox1
Text:
Sexo
Aada a groupBox1 los siguientes controles:
RadioButton:
Name:
rbHombre
Text:
Hombre
Checked:
True
RadioButton:
Name:
rbMujer
Text:
Mujer
Checked:
False
GroupBox
Name:
groupBox2
Text:
Idiomas
Aada a groupBox2 los siguientes controles:
CheckBox:

16/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Name:
Text:
Checked:
CheckBox:
Name:
Text:
Checked:

cbFrances
Francs
False

CheckBox:
Name:
Text:
Checked:

cbAleman
Alemn
False

CheckedListBox
Name:
CheckedOnClick:
Items:

cbIngles
Ingls
False

clbLenguaje
True

(Con el editor aada los siguientes strings)


Java
C#
Pascal
Fortran
Cobol
C++
C

StatusBar
Name:
Panels:

sbEstado

(Con el editor que se proporciona)


Aadir los siguientes (Ver figura)
Name: sbpCiudad
Name: sbpSexo
Name: sbpIdioma
Name: sbpLenguaje
En todos:
Text: (Vaco)
ShowPanel: True
Autosize: False en los dos primeros y
True en los otros dos.

17/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Figura 16.7
Ms o menos, el aspecto final de la aplicacin 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 continuacin:
private string strCiudad;
private string strSexo;

18/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

private string strIdioma;


private string strLenguaje;
public FormularioPrincipal()
{
InitializeComponent();
strCiudad="Jan";
strSexo="Hombre";
strIdioma="Ninguno";
strLenguaje="Ninguno";
lista.SelectedIndex=0;
ActualizarBarra();
}

En la ltima lnea, se aade un mtodo que recoge la seleccin de cada control y


la escribe en cada panel. Su cdigo 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 seleccin de la lista se debe tratar
el evento SelectedIndexChanged. Escriba el siguiente cdigo
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 mtodo trata el cambio de estado en cualquiera
de los dos controles y por eso, hay que definir el mismo mtodo 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 mtodo


comn que tratar a los tres controles se llamar cb_CheckedChanged.
private

void

cb_CheckedChanged(object

e)
{
strIdioma="";

19/48

sender,

System.EventArgs

Marco Besteiro y Miguel Rodrguez

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
mtodo
clbLenguaje_SelectedIndexChanged
private void clbLenguaje_SelectedIndexChanged(object sender,
System.EventArgs
e)
{
strLenguaje="";
foreach(string str in clbLenguaje.CheckedItems)
strLenguaje+=str + " ";
ActualizarBarra();
}

En este mtodo se recorre toda la coleccin de los items que tienen el estado a
Checked y se aade su texto al string correspondiente. Luego se actualiza la
barra.

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

20/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Figura 16.9: ventana de opciones de Microsoft Word.


Este control tiene varios TabPage o pestaas que trabajan de manera similar a un
GroupBox. Para utilizar este control, se deben aadir el nmero de pestaas que se
deseen a una coleccin del control llamada TabPages. Visual Studio proporciona un
editor para aadir o eliminar las pestaas de la coleccin de manera grfica, rpida e
intuitiva. Se puede acceder a l a travs de la propiedad TabPages del control.
Posteriormente se van colocando los controles en cada pestaa.

Propiedades
Las propiedades ms importantes son:
Alignment

Appearance
HotTrack
RowCount
TabCount
TabPages

Determina si las etiquetas son desplegadas en la parte


superior, izquierda, derecha o inferior opciones Top, Left,
Rigth y Bottom- del control.
Determina la apariencia de las etiquetas: botones 3D,
botones estndar o pestaas normales.
Propiedad booleana. Indica si la apariencia de la pestaa
cambia al pasar con el ratn sobre el nombre de la pestaa.
Nmero de filas de etiquetas en el control.
Nmero de etiquetas del control
Coleccin de pestaas. Se utiliza para aadir o eliminar

21/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

elementos del control.


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

Ejemplo: trabajando con el control TabControl.


Esta aplicacin figura 16.10 simula la configuracin de la impresin. En este
ejemplo, slo se intenta que la configuracin elegida se presente en los controles de
texto de la parte derecha de la ventana y no configura la impresin.
a) Cree un nuevo proyecto que se llame ProyectoTabControl
b) Modifique las propiedades del formulario:
Name: formOpciones
Text: Opciones de configuracin

Modifique la lnea del mtodo Main()


Application.Run(new Form1());

por la lnea
Application.Run(new FormOpciones());

Figura 16.10

22/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

c) Aada 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 pginas del
control para aadir dos pestaas (figura 16.11).

Figura 16.11
Pulse sucesivamente el botn Agregar cada vez que desee aadir una pestaa. Si se
equivoca siempre puede pulsar el botn Eliminar y comenzar de nuevo.
Name:
Text:

tpImprimir
Imprimir

Name:
Text:

tpOrtografia
Ortografa

e) Cierre la ventana del editor. A continuacin, desde la ventana de diseo, en la


primera etiqueta vaya aadiendo los controles que se indican situndolos
aproximadamente en posiciones que se aproximen a las de las figuras 16.10 y
16.12:

23/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Figura 16.12
e.1) En la TabPage tpImprimir, aada los controles siguientes:

GroupBox
Name:
Text:

groupBox1
Impresora

En groupBox1 site tres etiquetas y un ComboBox con las propiedades:


o

Label
Name:
label1
Text:
Nombre
Autosize:
True
Label
Name:
lTipoDeImpresora
Text:
Tipo
Autosize:
True
Label
Name:
label3
Text:
(Vaco)
Autosize:
False
ComboBox
Name:
cbImpresoras
Text:
HP LaserJet 1100
Items:
HP LaserJet 1100
Canon Jet BCJ 4000
HP DeskJet 843C

GroupBox

24/48

Marco Besteiro y Miguel Rodrguez

Name:
Text:

Controles Windows

groupBox2
Intervalo de pginas

En groupBox2 site cuatro RadioButton y un TextBox con las


propiedades:

RadioButton
o Name:
o Checked:
o Text:
RadioButton
o Name:
o Checked:
o Text:
RadioButton
o Name:
o Checked:
o Text:
RadioButton
o Name:
o Checked:
o Text:
TextBox
o Name:
o Text:

rbTodo
True
Todo
rbPaginaActual
False
Pgina actual
rbPaginas
False
Pginas
rbSeleccion
False
Seleccin
txtSeleccion
(Vaco)

GroupBox
Name:
groupBox3
Text:
Copias
En groupBox1 site una etiqueta, tres CheckBox
NumericUpDown:
o Label
Name:
label3
Text:
Nmero 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

un

Marco Besteiro y Miguel Rodrguez

Controles Windows

g) En la otra TabPage, tpOrtografia, aada nicamente un control


CheckedListBox con las propiedades siguientes:

CheckedListBox
Name:
clbOrtografia
Items:

(utilice el pequeo editor que aparece al pulsar sobre la propiedad)


Corregir uso accidental de bLOQ mYUS
Corregir dos MAyusculas SEguidas
Poner en mayscula la primera letra de una oracin
Cambiar las b por v
No cometer ninguna falta de ortografa
Reemplazar mientras se escribe
ThreeDCheckBoxes:True
CheckOnClick: True
h) Site fuera del control TabControl, dos etiquetas explicativas de dos cajas de

texto donde se escribir la configuracin seleccionada.

Label
Name:
label4
Text:
Opciones de impresin elegidas
Label
Name: label5
Text:
Opciones de ortografa seleccionadas
TextBox
Name: txtOpcionesImpresion
Text:
(Vaco)
Multiline: True
TextBox

Name: txtOpcionesOrtografia

Text:
(Vaco)

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

Marco Besteiro y Miguel Rodrguez

Controles Windows

InitializeComponent();
}

Cree un mtodo pblico que facilite la actualizacin de la caja de texto


txtOpcionesImpresion. Este mtodo simplemente devuelve la concatenacin 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


cdigo:
private void cbImpresoras_SelectedIndexChanged(object sender,
EventArgs e)
{
nombreImpresora=cbImpresoras.SelectedItem.ToString();
lTipoDeImpresora.Text=nombreImpresora;
txtOpcionesImpresion.Text=ActualizarOpciones();
}

La primera lnea recoge el tem seleccionado como string. Despus se escribe la


etiqueta que recoge el resultado de la eleccin y posteriormente se llama al mtodo
ActualizarOpciones() para actualizar la caja de texto txtOpcionesImpresion.
A continuacin se escribe el cdigo del evento CheckedChanged de los RadioButton.
Para ello aada este evento en uno de los controles, con el nombre rb_CheckedChanged
y escriba el siguiente cdigo.
private void rb_CheckedChanged(object sender, System.EventArgs e)
{
if(rbTodo.Checked)
intervaloPaginas="Imprimir Todo";
else if(rbPaginaActual.Checked)
intervaloPaginas="Imprimir pgina actual";
else if(rbPaginas.Checked)
intervaloPaginas="Imprimir paginas: " + txtSeleccion.Text;
else if(rbSeleccion.Checked)
intervaloPaginas="Imprimir seleccin";
txtOpcionesImpresion.Text=ActualizarOpciones();
}

Posteriormente, aada este mismo evento a los otros tres controles RadioButton, para
que todos estn tratados por el mismo mtodo manipulador.

Tambin se pretende que cuando se escriba algo en la caja de texto txtSeleccion, se


seleccione el RadioButton correspondiente, rbPaginas. Para ello, escriba el siguiente
cdigo en el evento TextChanged del TextBox:
private void txtSeleccion_TextChanged(object sender, System.EventArgs
e)

27/48

Marco Besteiro y Miguel Rodrguez

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 pestaa correspondiente a eventos, haga doble-click
sobre el evento CheckedChanged con lo que los eventos de los tres sern 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 cdigo 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 aada el nmero de copias, del valor obtenido del control NumericUpDown. Para
ello, en el evento nudCopias_ValueChanged se escribe el siguiente cdigo:
private void nudCopias_ValueChanged(object sender, System.EventArgs e)
{
nCopias=nudCopias.Value.ToString();
txtOpcionesImpresion.Text=ActualizarOpciones();
}

Ahora ya slo queda tratar el control situado en la otra pestaa. 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 coleccin
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 clbOrtografa_SelectedIndexChanged(object sender,
System.EventArgs
e)
{
strOrtografia="";
foreach(string item in clbOrtografa.CheckedItems)
strOrtografia+=item;
txtOpcionesOrtografia.Text=strOrtografia;
}

28/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

La clase TrackBar
El control TrackBar -tambin llamado "slider"- se utiliza para navegar a travs de una
gran cantidad de informacin 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 posicin corresponde a ese valor que se asigna
a la propiedad Value. El marcador se mueve en incrementos que se pueden especificar.
Las propiedades ms importantes de este control son: Value, TickFrequency, Minimum,
y Maximum. TickFrequency es el espaciamiento entre las marcas. Minimum y Maximum
son los valores mnimo y mximo que puede representar el control.
Tambin tienen importancia las propiedades SmallChange y LargeChange, que
representan el nmero de posiciones que se mover el marcador en respuesta a pulsar
las teclas izquierda o derecha y PAGE UP o PAGE DOWN -y tambin a un click de ratn en
el propio control- respectivamente.
Esta clase deriva directamente de la clase Control.

Propiedades
AutoSize
LargeChange

Maximum
Minimum
Orientation
SmallChange

TickFrequency
TickStyle
Value

Define si el control se ajusta en tamao


automticamente.
Valor que se aade o resta a la propiedad
Value cuando se mueve el slider por un
click de ratn o con las teclas AV PAG o
RE PAG.
Lmite superior de la propiedad Value.
Lmite inferior de la propiedad Value.
Orientacin del TrackBar
Valor que se aade o resta a la propiedad
Value cuando se mueve el slider desde el
teclado con las teclas izquierda o derecha..
Es el incremento de valor entre las
pequeas marcas dibujadas en el control.
Indica el modo de visualizacin del control.
Es el valor numrico que representa la
posicin actual del slider.

Eventos
Scroll
ValueChanged

Ocurre cuando el slider se mueve por


accion del ratn o por el teclado.
Ocurre cuando la propiedad Value cambia.

29/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Ejemplo: trabajando con el control TrackBar.


En la siguiente aplicacin 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 cdigo de la aplicacin pulse con el
botn derecho el formulario y escoja la opcin Ver cdigo.
e)
Cambie esto es error de la beta- la lnea
Application.Run(new Form1());

por la lnea
Application.Run(new FormularioPrincipal());

f) Establezca la siguiente propiedad del formulario FormularioPrincipal


Text: Aplicacin demo de Barras de desplazamiento

g) Site dos controles TrackBar, en el formulario y haga que sean ms o menos del
mismo tamao.
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
orientacin.
Maximun: 100 Valor mximo del track.
Minimum: 0 Valor mnimo 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 seales dibujadas en el track.
TickStyle: BottomRight Estilo de la seal que indica el valor.
i) Aada cajas de texto, del mismo tamao, con las siguientes propiedades:
Name:
txtValorBarraHorizontal
y
txtValorBarraVertical
respectivamente.
Text: 0

j) Aada dos etiquetas con las siguientes propiedades:


AutoSize: True
Text:
Valor

Barra

Horizontal

respectivamente

30/48

Valor

Barra

Vertical,

Marco Besteiro y Miguel Rodrguez

Controles Windows

k) El aspecto final de la aplicacin es el de la figura 16.14:


Se puede ajustar los mrgenes, tamaos 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 posicin 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 cdigo:
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

Marco Besteiro y Miguel Rodrguez

Controles Windows

mtodo 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 aplicacin.
Se puede observar que esta aplicacin queda un poco incompleta porque lo lgico sera
que si el usuario cambia el valor de las cajas de texto, tambin cambiaran los valores en
los TrackBar. Adems sera conveniente controlar la entrada de la caja de texto para
que sea numrica. No se ha hecho aqu para no complicar demasiado el cdigo. 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 aqullos controles que no lo proporcionan directamente, como,
por ejemplo, PictureBox.

La jerarqua de esta clase es la siguiente:


Control

ScrollBar

HScrollBar

VScrollBar

Figura 16.15

Propiedades
La propiedad principal es Value, que es el valor actual en la barra de desplazamiento.
Adems son tambin 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 pulsacin del
ratn en el control- y pequeos al pulsar en los extremos del control-.

Eventos
Scroll
ValueChanged

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


por defecto.
Ocurre cuando cambia el valor de la propiedad Value.

32/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Ejemplo: trabajando con el control ScrollBar.


En esta aplicacin se define el color de fondo de un panel a travs de los valores
numricos correspondientes a las barras de desplazamiento (16.16).

Figura 16.16

Para ello cree un nuevo proyecto llamado DialogoColor y en el formulario principal


sita los controles como aparecen en la figura 16.16.
Asigne las siguientes propiedades:
-Formulario:
Name: FormularioColor
Text: Formulario de Color
FormBorderStyle: FixedDialog

Cambiar tambin (slo en la versin beta) la lnea de mtodo Main():


Application.Run(new Form1());

por la lnea:

33/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Application.Run(new FormularioColor());

Aada un panel, tres etiquetas, tres cajas de texto y tres barras de desplazamiento con la
situacin 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

continuacin llame al evento ValueChanged de scbRojo y llmele


scb_ValueChanged. Las tres barras de desplazamiento compartirn el mismo mtodo y
cdigo. Escriba el siguiente cdigo:
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 cdigo 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 continuacin, en la lnea:
Color miColor=Color.FromArgb(nRojo,nVerde,nAzul);

34/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

se asigna al objeto miColor de la estructura Color, un color con el mtodo esttico


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 captulo dedicado al GDI.
El formato de este mtodo 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 cdigo sirve para los tres controles. Para esto, debe
asociarse este mismo evento de nombre scb_ValueChanged a los controles scbVerde y
scbAzul. Tambin 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 lnea del evento aparece el nombre scb_ValueChanged. Pulse
sobre l y de modo automtico se asocia este mismo evento al control scbVerde.
Realice la misma operacin 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 automticamente y se siten 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 introduccin de
valores en las cajas de texto, para no complicar excesivamente el ejercicio.
Adems, 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 cdigo, se compartirn 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 automtico 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 ms general, como por ejemplo, txt_KeyPress o
cualquier otro.
Escriba el siguiente cdigo en la primera de las cajas de texto.
private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
//Aqu se debera controlar que la entrada sea numrica
int n=int.Parse(((TextBox)sender).Text);
if(n<=255 && n>=0)
{
if(e.KeyChar=='\r')
{
int nRojo=int.Parse(txtRojo.Text);

35/48

Marco Besteiro y Miguel Rodrguez

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 nmero entre 0 y 255");
}

Observaciones:
a) En la lnea
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 nmero introducido est entre 0 y 255
c) En la lnea if(e.KeyChar=='\r') se chequea si la tecla pulsada es un ENTER,
que corresponde al carcter \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 grficos: 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 tamao y posicionamiento de
la imagen en el control se pueden controlar por medio de la propiedad SizeMode que
puede tomar valores de la enumeracin PictureBoxSizeMode. El control PictureBox
se visualiza por defecto sin bordes, pero se puede modificar con la propiedad
BorderStyle.

Propiedades
BorderStyle
Image
SizeMode

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


Fixed3D.
La imagen que se visualiza en el control.
Modo de posicionamiento y visualizacin de la imagen. A
continuacin se muestran los valores que puede tomar.

Nota: Valores de la enumeracin PictureBoxSizeMode:


AutoSize
CenterImage

El tamao del control se modifica hasta ajustarse al de la imagen.


Si la imagen es ms grande que el control se visualiza en el centro
36/48

Marco Besteiro y Miguel Rodrguez

Normal
StretchImage

Controles Windows

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


control.
La imagen se sita en la esquina superior izquierda del control. Si
la imagen es ms grande que el control, no se visualiza entera.
Se modifica el tamao de la imagen para que se ajuste al control.

Ejemplo: trabajando con barras de desplazamiento y con el control


PictureBox.
Esta aplicacin lee una imagen al hacer doble click sobre el formulario y cuando se
cambia el tamao del formulario se refresca la imagen. Es posible que no se entiendan
bien algunas de las lneas de cdigo, en concreto las que se refieren a la carga de la
imagen. Se explicarn en detalle ms 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. Aada 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 cdigo 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

Marco Besteiro y Miguel Rodrguez

Controles Windows

// Abre la imagen en el PictureBox y la presenta


cajaImagen.Image = Image.FromFile(dlgAbrir.FileName);
//Aade cdigo para "ajustar" la imagen
this.PresentaElScrollBar();
}
}

Se desea tambin que cuando cambie el tamao del formulario, se refresque la imagen.
Para ello, escriba el cdigo siguiente en el evento Resize de Form1.
private void cajaImagen_Resize(object sender, System.EventArgs e)
{
/* Si el PictureBox tiene imagen, verla si necesita scrollbars
y refrescar la imagen*/
if(cajaImagen.Image != null)
{
this.PresentaElScrollBar();
this.Refresh();
}
}

Adems, cuando la imagen sea ms pequea que el formulario, se presentan las barras
de desplazamiento y se trata el evento Scroll de las barras. Ambas tienen el mismo
evento.
private void sbVer_Scroll(object sender, ScrollEventArgs e)
{
/* Crea un objeto Graphics y dibuja una parte
de la imagen en el PictureBox. */
Graphics g = cajaImagen.CreateGraphics();
g.DrawImage(cajaImagen.Image,
new Rectangle(0, 0, cajaImagen.Width - sbHor.Height,
cajaImagen.Height - sbVer.Width),
new Rectangle (sbHor.Value, sbVer.Value,
cajaImagen.Width-sbHor.Height,
cajaImagen.Height-sbVer.Width), GraphicsUnit.Pixel);
}

El mtodo PresentaElScrollBar()
desplazamiento cuando sea necesario.

se encarga de presentar las barras de

public void PresentaElScrollBar()


{
/// Si la imagen es ms ancha, presenta el HScrollBar
if (cajaImagen.Width > cajaImagen.Image.Width)
sbHor.Visible = false;

38/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

else
sbHor.Visible = true;
// Si la imagen es ms alta, presenta el VScrollBar
if (cajaImagen.Height > cajaImagen.Image.Height)
sbVer.Visible = false;
else
sbVer.Visible = true;
}

La clase Timer
Permite que ocurra un evento cada determinado intervalo de tiempo. No deriva de la
clase Control, sino de la clase Component.

Propiedades
Enabled

Interval

Propiedad booleana que habilita o deshabilita el lanzamiento de los


eventos de reloj. Se puede conseguir el mismo efecto con los mtodos
Star() y Stop().
Indica, en milisegundos, el intervalo de tiempo en que se producirn los
disparos o eventos de reloj.

Mtodos
Star() y Stop()
OnTick()

Habilitan y deshabilitan el reloj


Este mtodo puede seer sobreescrito para una clase que derive de
Timer.

Eventos
El evento de reloj se denomina Tick. Ocurre cuando transcurre el intervalo de reloj
indicado.

Ejemplo: trabajando con el control Timer.


Esta aplicacin implementa un cronmetro muy simple .
Para ello, cree un nuevo proyecto para Windows. Aada a su formulario principal un
control de la clase Timer se situar en la parte inferior del IDE, fuera del formulario,
para indicar que es un control no visual- y cambie las siguientes propiedades del
control:
Name:
Interval:

reloj
100

(intervalo de dcimas de segundo)

39/48

Marco Besteiro y Miguel Rodrguez


Enabled:

Controles Windows

true

Aada una etiqueta al formulario y cambie las propiedades siguientes:


Name:
Text:

segundos
0

Defina cuatro variables estticas, inicializadas a 0, que correspondern a las dcimas,


segundos, minutos y horas, como miembros de las clase Form1:
static
static
static
static

int
int
int
int

hh=0;
mm=0;
ss=0;
dd=0;

El aspecto final de la aplicacin ser, ms o menos el de la figura 16.18:

Figura 16.18
A continuacin, escriba el siguiente cdigo en el evento Tick del reloj:
private void reloj_Tick(object sender, System.EventArgs e)
{
//Cada evento de reloj, suma una dcima
dd++;
//Si se ha llegado a 10 dcimas
if(dd==10)
{
//poner las dcimas a cero y sumar un segundo
dd=0;
ss++;
//Si se ha llegado a 60 segundos
if(ss==60)
{
//Poner segundos a cero y sumar un minuto
ss=0;
mm++;
//Si se ha llegado a 60 minutos
if(mm==60)
{
//minutos a cero, y sumar una hora

40/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

mm=0;
hh++;
}
}
}
//Escribir la hora en el formato: hh:mm:ss:dd
hora.Text = hh.ToString() + ":" + mm.ToString() + ":"
+ ss.ToString() + ":" + dd.ToString();
}

Compile y ejecute la aplicacin.

41/48

Marco Besteiro y Miguel Rodrguez

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 continuacin. Un objeto de la clase DateTime encapsula informacin
del da y la hora.

Propiedades
Date
Day
DayOfWeek
DayOfYear
Hour
Millisecond
Minute
Month
Second
Ticks
TimeOfDay
Year

Es de tipo DateTime. Obtiene la fecha actual.


Es de tipo entero. Obtiene el da del mes.
Da de la semana.
Da del ao.
Hora.
Milisegundos
Minutos.
Mes.
Segundos.
Nmero de veces que han pasado intervalos
nanosegundos.
Hora dentro del da.
Ao.

de

100

Propiedades estticas:

MaxValue
MinValue
Now
Today

Constante que representa el valor ms grande posible que puede


tomar el objeto DateTime.
Constante que representa el valor ms pequeo posible que puede
tomar el objeto DateTime
Objeto DateTime que encapsula la hora actual del ordenador.
Objeto DateTime con la fecha actual.

Mtodos
ToLongDateString(),ToLongTimeString(), Convierten la fecha o la hora a
ToShortDateString(),ToShortDateString(), distintos formatos de cadena.
ToShortTimeString(), ToString()

Mtodos estticos:

DaysInMonth

Nmero de das de un determinado mes de un ao concreto.

Ejemplo: trabajando con la clase DateTime.

42/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

Esta aplicacin 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 da 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

Marco Besteiro y Miguel Rodrguez

Controles Windows

La clase DateTimePicker
Se utiliza para seleccionar una determinada fecha, de manera grfica. 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 presentacin en el control. Se
debe encerrar entre comillas simples las letras reservadas de esta propiedad que son d
(da) m(mes) y(ao) 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 ms informacin, vase la ayuda: Date and Time Format Strings.

Propiedades
CalendarFont
CalendarForeColor
CalendarMonthBackground
CalendarTitleBackColor
CalendarTitleForeColor
CalendarTrailingForeColor
Checked

CustomFormat

Propiedades para el diseo grfico 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.
Cuando la propiedad ShowCheckBox es true
indica el estado del control CheckBox adjunto a
la fecha
Define el formato personalizado de la fecha y/o
la hora.

44/48

Marco Besteiro y Miguel Rodrguez


DropDownAlign
Format

MaxDate
MinDate
ShowCheckBox
ShowUpDown

Value

Controles Windows
Indica si la lista que se despliega estar alineada
a la izquierda o a la derecha.
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,
Define las fechas lmites que se pueden
seleccionar en este control.
Valor booleano que indica si se adjunta o no un
control CheckBox en el control.
Indica si se utiliza un control up-down para
selecionar la fecha o un ComboBox que
despliegue un calendario.
Es el valor fecha y hora asignado al control.

Eventos
CloseUp
DropDown
ValueChanged

Ocurre cuando se cierra el calendario asociado al control.


Ocurre cuando se despliega el calendario asociado al control.
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

Marco Besteiro y Miguel Rodrguez

Controles Windows

La clase MonthCalendar
Esta clase tambin deriva directamente de la clase Control. El control correspondiente
a la clase MonthCalendar permite seleccionar una fecha o un rango de das de manera
visual. Mediante las propiedades MinDate y MaxDate se puede limitar el abanico de
fechas a elegir.
Es posible modificar el aspecto grfico del calendario cambiando los valores de las
propiedades ForeColor, TitleBackColor, TitleForeColor, TrailingForeColor y
BackColor.
Muchas veces es ms sencillo utilizar un control DateTimePicker en lugar de
MonthCalendar si no se pretende trabajar con un rango de das.

Propiedades
DateTime[] BoldedDates

CalendarDimensions
Day FirstDayOfWeek
DateTime MaxDate
int MaxSelectionCount
DateTime MinDate
DateTime[]MonthlyBoldedDates
int ScrollChange
DateTime SelectionEnd
SelectionRange SelectionRange

DateTime SelectionStart
boolean ShowToday

boolean ShowTodayCircle
boolean ShowWeekNumbers

Es el array de objetos de tipo DateTime


que determina los das sealados en
negrita.
El nmero de filas y de columnas que
tiene el control.
Define el primer da de la semana. Por
defecto es Day.Default
El da ms lejano del futuro que es posible
seleccionar.
El mximo nmero de das que es posible
seleccionar. Por defecto es 7.
El da ms lejano del pasado que es
posible seleccionar.
Cambio de meses al hacer un scroll en el
control.
Es el da final del rango de das
seleccionado.
Devuelve un objeto de la clase
SelectionRange. Esta clase representa el
rango de das 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 slo se selecciona un da Start
y End son iguales.
Define la fecha de comienzo en la
seleccin de un rango de das.
Indica si la fecha representada en la
propiedad TodayDate se presenta en la
parte inferior del control.
Indica si se rodea con un pequeo crculo
la fecha actual.
Indica si se presenta o no en el control el
46/48

Marco Besteiro y Miguel Rodrguez

Color TitleBackColor
Color TitleForeColor
DateTime TodayDate
Color TrailingForeColor

Controles Windows
nmero de semana relativo al ao.
Color de fondo del area del ttulo del
control.
Color de la letra del ttulo del control.
Es el valor que utiliza el control como
fecha actual.
Color de los nmeros de los das que no
pertenecen al mes del ttulo del control.

Mtodos
void SetDate(DateTime date)

Define la fecha actual.

void SetSelectionRange (DateTime d1, DateTime Define


d2)

las
seleccionadas.

fechas

Ejemplo: trabajando con los controles DateTimerPicker y MonthCalendar.


En esta aplicacin 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 llmele ProyectoCalendario.
Aada un control DateTimerPicker y un control MonthCalendar con sus propiedad
Name dtpFecha y mcCalendario respectivamente. Juegue un poco con las

47/48

Marco Besteiro y Miguel Rodrguez

Controles Windows

propiedades que definen el look de los controles hasta dejar la apariencia que se
desee. Aada tambin una etiqueta con la propiedad Name etiqueta, y su propiedad
Text vaca.
Se debe imprimir en la etiqueta la fecha sin incluir el ao: por ejemplo, imagnese que
est definiendo cumpleaos para una agenda. Para ello, implemente los eventos
ValueChanged y DateChanged de los controles DateTimerPicker y MonthCalendar
respectivamente con el siguiente cdigo:
private void dtpFecha_ValueChanged(object sender, EventArgs e)
{
DateTime
hoy
=
dtpFecha.Value;
mcCalendario.SelectionStart=mcCalendario.SelectionEnd=hoy;
etiqueta.Text ="Cumpleaos de Miriam:" + hoy.Day + "/" +
hoy.Month;
}
private void mcCalendario_DateChanged(object sender,DateRangeEventArgs
e)
{
DateTime hoy = mcCalendario.SelectionStart;
dtpFecha.Value = hoy;
etiqueta.Text ="Cumpleaos de Miriam:" + hoy.Day + "/" +
hoy.Month;
}

Compile y ejecute la aplicacin

48/48

You might also like