Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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
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:
La clase GroupBox
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.
No se estudian aquí ninguna propiedad porque las hereda todas de la clase Control.
La clase ToolTip
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
Marco Besteiro y Miguel Rodríguez Controles Windows
Propiedades
Métodos
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 -
Estas dos clases se estudian juntas porque su funcionalidad es muy parecida y, por lo
tanto, coinciden muchas de sus propiedades y eventos.
Control
ListControl
3/48
ListBox ComboBox
Marco Besteiro y Miguel Rodríguez Controles Windows
Figura 16.1
Suponga, por ejemplo, que se tiene un ListBox con los cinco elementos de la tabla
siguiente.
Indice Item
0 objeto2
1 objeto4
2 objeto5
4/48
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.
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
Marco Besteiro y Miguel Rodríguez Controles Windows
Hay varios métodos muy interesantes a la hora de trabajar con estos controles.
Eventos
Además del resto de los eventos que heredan de la clase Control, estas clases tienen
dos eventos específicos:
6/48
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.
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
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).
lbI.Items.Add(textoI.Text);
textoI.Clear();
textoI.Focus();
b) Botón btnD:
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();
Application.Exit();
8/48
Marco Besteiro y Miguel Rodríguez Controles Windows
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.
Eventos
9/48
Marco Besteiro y Miguel Rodríguez Controles Windows
Figura 16.3
10/48
Marco Besteiro y Miguel Rodríguez Controles Windows
Figura 16.4
11/48
Marco Besteiro y Miguel Rodríguez Controles Windows
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.
Figura 16.5
Propiedades
• Propiedades de UpDownBase:
12/48
Marco Besteiro y Miguel Rodríguez Controles Windows
• Propiedades DomainUpDown
• Propiedades de NumericUpDown
Se realiza un ejemplo con este control más adelante, al explicar el control TabControl.
La clase Panel
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.
13/48
Marco Besteiro y Miguel Rodríguez Controles Windows
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...
Figura 16.6
La clase StatusBar se usa para crear una barra de estado y la clase StatusBarPanel
para crear paneles de la barra de estado.
14/48
Marco Besteiro y Miguel Rodríguez Controles Windows
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.
panel2.Text = DateTime.Now.ToString();
Propiedades
Eventos
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
Marco Besteiro y Miguel Rodríguez Controles Windows
Application.Run(new Form1());
Application.Run(new FormularioPrincipal());
• 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
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
Marco Besteiro y Miguel Rodríguez Controles Windows
Figura 16.7
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:
18/48
Marco Besteiro y Miguel Rodríguez Controles Windows
public FormularioPrincipal()
{
InitializeComponent();
strCiudad="Jaén";
strSexo="Hombre";
strIdioma="Ninguno";
strLenguaje="Ninguno";
lista.SelectedIndex=0;
ActualizarBarra();
}
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
19/48
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();
}
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
20/48
Marco Besteiro y Miguel Rodríguez Controles Windows
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
21/48
Marco Besteiro y Miguel Rodríguez Controles Windows
Figura 16.10
22/48
Marco Besteiro y Miguel Rodríguez Controles Windows
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
23/48
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
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
Marco Besteiro y Miguel Rodríguez Controles Windows
• Name: groupBox2
• Text: Intervalo de páginas
• 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
Marco Besteiro y Miguel Rodríguez Controles Windows
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:
public FormOpciones()
{
nombreImpresora="HP LaserJet 1100";
intervaloPaginas=" Todo";
opcionesCopias = " ";
nCopias =" 1";
strOrtografia="";
26/48
Marco Besteiro y Miguel Rodríguez Controles Windows
InitializeComponent();
}
Posteriormente, añada este mismo evento a los otros tres controles RadioButton, para
que todos estén tratados por el mismo método manipulador.
27/48
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.
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:
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.
28/48
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.
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
Marco Besteiro y Miguel Rodríguez Controles Windows
En la siguiente aplicación las cajas de texto actualizan los valores de los TrackBar en
cada momento.
g) Sitúe dos controles TrackBar, en el formulario y haga que sean más o menos del
mismo tamaño.
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
Marco Besteiro y Miguel Rodríguez Controles Windows
Figura 16.13
Figura 16.14
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 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.
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
Control
ScrollBar
HScrollBar VScrollBar
Figura 16.15
Propiedades
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
Marco Besteiro y Miguel Rodríguez Controles Windows
Figura 16.16
-Formulario:
Name: FormularioColor
Text: Formulario de Color
FormBorderStyle: FixedDialog
por la línea:
33/48
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)
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
Marco Besteiro y Miguel Rodríguez Controles Windows
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.
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.
35/48
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.
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.
36/48
Marco Besteiro y Miguel Rodríguez Controles Windows
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.
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
37/48
Marco Besteiro y Miguel Rodríguez Controles Windows
Se desea también que cuando cambie el tamaño del formulario, se refresque la imagen.
Para ello, escriba el código siguiente en el evento Resize de Form1.
Además, cuando la imagen sea más pequeña que el formulario, se presentan las barras
de desplazamiento y se trata el evento Scroll de las barras. Ambas tienen el mismo
evento.
38/48
Marco Besteiro y Miguel Rodríguez Controles Windows
else
sbHor.Visible = true;
// Si la imagen es más alta, presenta el VScrollBar
if (cajaImagen.Height > cajaImagen.Image.Height)
sbVer.Visible = false;
else
sbVer.Visible = true;
}
La clase Timer
Propiedades
Métodos
Eventos
Name: reloj
Interval: 100 (intervalo de décimas de segundo)
39/48
Marco Besteiro y Miguel Rodríguez Controles Windows
Enabled: true
Name: segundos
Text: 0
Figura 16.18
40/48
Marco Besteiro y Miguel Rodríguez 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 aplicación.
41/48
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(), Convierten la fecha o la hora a
ToShortDateString(),ToShortDateString(), distintos formatos de cadena.
ToShortTimeString(), ToString()
• Métodos estáticos:
42/48
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();
Figura 16.19
43/48
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 Propiedades para el diseño gráfico del control.
CalendarForeColor Con ellas se puede definir el tipo de letra y su
CalendarMonthBackground
CalendarTitleBackColor color, así como el color de fondo del control y
CalendarTitleForeColor del calendario que se despliega.
CalendarTrailingForeColor
Checked Cuando la propiedad ShowCheckBox es true
indica el estado del control CheckBox adjunto a
la fecha
CustomFormat Define el formato personalizado de la fecha y/o
la hora.
44/48
Marco Besteiro y Miguel Rodríguez Controles Windows
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
Marco Besteiro y Miguel Rodríguez Controles Windows
La clase MonthCalendar
Es posible modificar el aspecto gráfico del calendario cambiando los valores de las
propiedades ForeColor, TitleBackColor, TitleForeColor, TrailingForeColor y
BackColor.
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 Cambio de meses al hacer un scroll en el
int ScrollChange 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
Marco Besteiro y Miguel Rodríguez Controles Windows
Métodos
void SetDate(DateTime date) Define la fecha actual.
void SetSelectionRange (DateTime d1, DateTime Define las fechas
d2)
seleccionadas.
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
47/48
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:
48/48