Professional Documents
Culture Documents
Controles Windows
Propiedades
Appearance
AutoCheck
Checked
CheckState
ThreeState
1/48
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
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
Controles Windows
Propiedades
Active
AutomaticDelay
AutoPopDelay
InitialDelay
ReshowDelay
Mtodos
string GetToolTip(Control c)
SetToolTip(Control c, straing str)
Control
ListControl
3/48
ListBox
ComboBox
Controles Windows
Figura 16.1
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
objeto2
objeto4
objeto5
4/48
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
Mtodos
5/48
Controles Windows
Hay varios mtodos muy interesantes a la hora de trabajar con estos controles.
ClearSelected()
FindString(string str)
Eventos
Adems del resto de los eventos que heredan de la clase Control, estas clases tienen
dos eventos especficos:
ItemCheck
6/48
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
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();
8/48
Controles Windows
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
Eventos
9/48
Controles Windows
Figura 16.3
10/48
Controles Windows
lEquipo
(Vaco)
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
Controles Windows
Figura 16.5
DomainUpDown y NumericUpDown derivan de una clase comn llamada UpDownBase que
Propiedades
Propiedades de UpDownBase:
12/48
bool InterceptArrowKeys
bool ReadOnly
string Text
Propiedades DomainUpDown
DomainUpDownItemCollection Items
int SelectedIndex
object SelectedItem
bool Sorted
Controles Windows
Propiedades de NumericUpDown
int DecimalPlaces
bool ThousandsSeparator
bool Hexadecimal
decimal Increment
decimal Minimun
decimal Maximun
decimal Value
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
13/48
Controles Windows
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();
14/48
Controles Windows
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");
Propiedades
Las propiedades ms importantes de esta clase son las siguientes:
Panels
Eventos
No se suelen utilizar eventos en este control, aunque si se pretende dibujar un control
manualmente, son necesarios los siguientes:
DrawItem
Panel_Click
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
Controles Windows
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
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
StatusBar
Name:
Panels:
sbEstado
17/48
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
Controles Windows
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();
}
void
cb_CheckedChanged(object
e)
{
strIdioma="";
19/48
sender,
System.EventArgs
Controles Windows
if(cbIngles.Checked)
strIdioma+=cbIngles.Text+" ";
if(cbFrances.Checked)
strIdioma+=cbFrances.Text+ " ";
if(cbAleman.Checked)
strIdioma+=cbAleman.Text;
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
Controles Windows
Propiedades
Las propiedades ms importantes son:
Alignment
Appearance
HotTrack
RowCount
TabCount
TabPages
21/48
Controles Windows
por la lnea
Application.Run(new FormOpciones());
Figura 16.10
22/48
Controles Windows
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
23/48
Controles Windows
Figura 16.12
e.1) En la TabPage tpImprimir, aada los controles siguientes:
GroupBox
Name:
Text:
groupBox1
Impresora
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
Name:
Text:
Controles Windows
groupBox2
Intervalo de pginas
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
Controles Windows
CheckedListBox
Name:
clbOrtografia
Items:
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
Controles Windows
InitializeComponent();
}
return
(nombreImpresora+intervaloPaginas+opcionesCopias+nCopias);
}
Posteriormente, aada este mismo evento a los otros tres controles RadioButton, para
que todos estn tratados por el mismo mtodo manipulador.
27/48
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
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
Eventos
Scroll
ValueChanged
29/48
Controles Windows
Cree
un
nuevo
proyecto
denominado
BarrasDeDesplazamiento.
b)
por la lnea
Application.Run(new FormularioPrincipal());
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
Barra
Horizontal
respectivamente
30/48
Valor
Barra
Vertical,
Controles Windows
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
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.
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
32/48
Controles Windows
Figura 16.16
por la lnea:
33/48
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)
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
Controles Windows
35/48
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);
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
Normal
StretchImage
Controles Windows
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
Controles Windows
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.
38/48
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
Mtodos
Star() y Stop()
OnTick()
Eventos
El evento de reloj se denomina Tick. Ocurre cuando transcurre el intervalo de reloj
indicado.
reloj
100
39/48
Controles Windows
true
segundos
0
int
int
int
int
hh=0;
mm=0;
ss=0;
dd=0;
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
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();
}
41/48
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
de
100
Propiedades estticas:
MaxValue
MinValue
Now
Today
Mtodos
ToLongDateString(),ToLongTimeString(), Convierten la fecha o la hora a
ToShortDateString(),ToShortDateString(), distintos formatos de cadena.
ToShortTimeString(), ToString()
Mtodos estticos:
DaysInMonth
42/48
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
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
44/48
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
45/48
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
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)
las
seleccionadas.
fechas
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
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;
}
48/48