Académique Documents
Professionnel Documents
Culture Documents
Sesión Nro. 03
Tema: CONTROLES WINDOWS FORM BÁSICOS Ciclo: V
Sección: 3217
Docente: Ing. Aníbal Sardón Paniagua Fecha:
OBJETIVOS:
REQUISITOS:
Computadoras con una NET Framework 4.0
Tener instalado y configurado el VISUAL STUDIO .NET 2013
Plumón, mota y pizarra acrílica
INFORMACIÓN:
El creador de un programa dirigido por eventos debe definir los eventos que manejarán su programa y
las acciones que se realizarán al producirse cada uno de ellos, lo que se conoce como el
administrador (manejador) de evento. Los eventos soportados estarán determinados por el lenguaje de
programación utilizado, por el sistema operativo e incluso por eventos creados por el mismo
programador.
entonces enviarlos al manejador adecuado que es capaz de trabajar con eventos de esa naturaleza.
El disparador tiene que procesar un flujo de eventos, así que su lógica debe incluir un bucle de
eventos para poder enviar un evento a un manejador y volver a escuchar a la espera de nuevos
eventos que disparar.
Es común que exista un evento especial que rompa el bucle y salga de la aplicación, a ese evento se
le llama evento finalizador y es muy común en todas las librerías para escribir aplicaciones GUI.
También puede ocurrir que el disparador capture un evento de naturaleza desconocida o para el que
no exista un manejador adecuado, en esos casos, el disparador debe descartar el evento o lanzar una
excepción.
La librería de los Windows Forms trae un conjunto de los controles más utilizados en el diseño de las
GUI para la creación de aplicaciones Windows. Estos elementos (conocidos como controles
Windows Form) son derivados de la clase System.Windows.Forms.Control, a través de la cual
comparten muchas propiedades, métodos y eventos comunes. Adicionalmente cada uno de estos
controles posee sus propias propiedades, métodos y eventos que le dan un comportamiento propio.
Label y LinkLabel
Miembros importantes de la clase Label
Miembros Tipo Descripción
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 3/48
Visual Basic
lnkWinForms.LinkVisited = True
' abre la pagina Windows Forms Community Website
System.Diagnostics.Process.Start("IExplore", "http://www.windowsforms.net")
End Sub
System.Diagnostics.Process.Start(e.Link.LinkData.ToString())
End Sub
End Class
C#
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 5/48
namespace Laboratorio02_01CS
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
System.Diagnostics.Process.Start(e.Link.LinkData.ToString());
}
}
}
TextBox y RichTextBox
Las Clases TextBox y RichTextBox de la clase base TextBoxBase. La clase TextBoxBase implementa
la funcionalidad básica usada por ambos controles.
El control TextBox provee un área dentro de la cual el usuario puede ingresar texto. Dependiendo de
cómo se configure las propiedades del control, se puede ingresar múltiples líneas o ingresar caracteres
enmascarados como que se mostrarán como un asterisco (*).
Miembros importantes de la clase TextBox
Miembros Tipo Descripción
AcceptReturn Property Trabaja solo si el text box acepta múltiples líneaS. Representa un valor
Boolean, si es Trueindica que se presionó la tecla Enter, en un multiline
textbox se insertará una nueva línea.
CharacterCasing Property Determina como se mostrarán los caracteres ingresados. El valor de ésta
propiedad puede ser Lower (minúsculas), Normal, y Upper (mayúsculas).
El valor por defecto será Normal.
MultiLine Property Indica si el Textbox puede aceptar multiples líneas. El valor por defecto
es False.
PasswordChar Property El carácter con el que se enmascara cada carácter ingresado en el
Textbox. Es usado cuando el Textbox recibe información importante que
debe ser ocultado, como un password. Si no se especifica, el texto es
mostrado normalmente.
ReadOnly Property Cuando es puesto a True, el Textbox aparece con un color de fondo gris
y el texto no puede ser editado.
ScrollBars Property Especifica que scroll bars (none, horizontal, vertical, or both) aparecerá
en un multiline text box.
Text Property Texto contenido en el text box.
TextChanged Event Evento por defecto. Ocurre cuando un valor de de la propiedad Text
cambia.
WordWrap Property Determina si el control puede automáticamente mover las palabras a una
nueva línea si es requerido. El valor por defecto en True.
El control RichTextBox, como su nombre sugiere, es un Textbox con capacidades de formateo de texto
enriquesido. Éste puede leer y escribir archivos en Rich Text Format (RTF). Puede mostrar su
contenido con caracteres enriquesidos format de párrafos. Porciones de texto dentro del control puede
ser mostrado en varios formatos.
Miembros importantes de la clase RichTextBox
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 7/48
Visual Basic
End Sub
End Sub
End Sub
End Sub
End Class
C#
namespace Laboratorio02_02CS
{
public partial class frmLaboratorio02 : Form
{
public frmLaboratorio02()
{
InitializeComponent();
}
El control CheckedListBox deriva del control ListBox y hereda mucha de las características de la clase
ListBox. Un CheckedListBox muestra una lista de ítems que pueden ser seleccionados a través de un
CheckBox asociado a cada ítem. Esto implica que uno o más ítems pueden ser seleccionados de la lista.
Un control ComboBox es similar al control ListBox con un campo de edición. El ComboBox aparece
como un TextBox con un botón flecha al costado derecho. Cuando se hace clic sobre la flecha se
muestra una lista desplegable conteniendo los ítems predefinidos. El usuario puede seleccionar un solo
ítem del ComboBox. Un ComboBox permite el ingreso de nuevo texto o seleccionar de la lista un solo
ítem.
Visual Basic
End Sub
sbLanguages.Append( _
"Ud. Seleccionó:" & vbCrLf & vbCrLf)
' Si hay items seleccionados en el ListBox
' crea una cadena con sus nombres
End Sub
End Class
C#
Japanese Kana
/*
agregar ésta línea de código al inicio
para manipular cadenas con la clase StringBuilder
*/
using System.Text;
namespace Laboratorio02_03CS
{
public partial class frmLaboratorio02 : Form
{
public frmLaboratorio02()
{
InitializeComponent();
}
if (e.NewValue == CheckState.Checked)
// Checked: Agregar a ListBox
lbSelectedScripts.Items.Add(item);
else
// Unchecked: Elimina del ListBox
lbSelectedScripts.Items.Remove(item);
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 18/48
}
}
}
LA CLASE System.Convert
También se puede utilizar este método para convertir entrada y salida de datos
Console.WriteLine(Convert.ToInt32(true)); //1
Console.WriteLine(Convert.ToInt32(false)); //0
Console.WriteLine(Convert.ToDateTime("03-12-06")); // 03/12/2006 12:00:00
Ejemplo:
Convertir un número de metros leidos desde teclado en un complejo de pies y pulgadas sabiendo que
1 metro = 39.27 pulgadas y 1 pie=12 pulgadas.
LA CLASE SYSTEM.MATH
La clase System.Math proporciona una serie de constantes y funciones de uso muy común en
expresiones aritméticas. Math es una clase perteneciente al espacio del nombre System. Los métodos
estáticos de la clase Math realizan cálculos matemáticos básicos tales como máximo, mínimo, valor
absoluto, raíz cuadrada y trigonométrica. Los cálculos en como flotante se realizan utilizando double y
algoritmos estándar.
Ejemplo:
int i=10;
double c=Math.Round(Math.Pow(i,2)*Math.PI,2);
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 20/48
LA CLASE SYSTEM.RANDOM
Representa un generador de los números pseudoaleatorios, es decir de números que cumplen ciertos
requisitos estadísticos de aleatoriedad:
Sin embargo, los números escogidos no son completamente aleatorios, ya que se parte de un valor
denominado semilla y se usa un algoritmo matemático para generarlos. Esto da lugar a que se genere la
misma serie de números cuando se usa repetidamente que la semilla. La forma de producir sucesiones
diferentes será conseguir que la semilla varíe cada vez que el programa se ejecuta, por ejemplo
estableciendo como semilla un valor dependiente del tiempo.
Ejemplo:
int z;
Random w=new Random();
z=w.Next(21);
ACTIVIDADES
1. El siguiente programa permite ingresar los apellidos y nombres, fecha de ingreso, turno y promedio de un
alumno. Teniendo las siguientes características:
El primer carácter de cada nombre o apellido debe convertirse en mayúscula y el resto en minúsculas.
Se debe verificar la fecha ingresada este correcta.
En el turno solo debe aceptar las letras M, T y N.
El promedio debe ser un número entre 0 y 21.
Los botones Nuevo y Salir permanecen desactivados hasta que se ingresen todos los datos correctos.
C#
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 21/48
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Laboratorio02_05VB
{
public partial class frmLaboratorio02 : Form
{
public frmLaboratorio02()
{
InitializeComponent();
}
return true;
else
return false;
}
public void ingresados()
{
//valida si se han ingresado todos los datos
if (txtApeNom.Text.Trim() != "" && IsDateTime(txtFecIng.Text) &&
txtTurno.Text.Trim() != "" && txtPromedio.Text.Trim() != "" )
{
btNuevo.Enabled = true;
btSalir.Enabled = true;
}
else
{
btNuevo.Enabled = false;
btSalir.Enabled = false;
}
}
// equivale a la función IsDate en Visual Basic
// función que verifica si la cadena es una fecha válida
private bool IsDateTime(Object obj)
{
bool result;
try
{
DateTime myDT = DateTime.Parse(obj.ToString());
result = true;
}
catch (FormatException e)
{
result = false;
}
return result;
}
Longitud = (txtApeNom.TextLength) - 1;
if (txtApeNom.TextLength > 0) // si el campo no esta vacío
{
if (Longitud < 1)
{
Longitud = Longitud + 1;
// extrae de la DERECHA un caracter, equivale a RIGHT
Caracter = char.Parse(txtApeNom.Text.Substring(
txtApeNom.Text.Length - 1, 1));
Caracter = char.ToUpper(Caracter); // convierte a mayúsculas
txtApeNom.Text = "";
txtApeNom.Text = char.ToString(Caracter);
txtApeNom.SelectionStart = Longitud + 1;
return; //OJO
}
if (Ascii == 32)
{
// extrae de la IZQUIERDA una cantidad de caracteres, equivale a LEFT
Temp = txtApeNom.Text.Substring(0, Longitud);
string Letra;
char Caracter;
Letra = char.ToUpper(e.KeyChar).ToString();
if (Convert.ToInt32(e.KeyChar) == 13)
{
// extrae una carcater de la izquierda , equivale a LEFT()
Caracter = char.Parse(txtTurno.Text.Substring(0, 1));
if (Caracter != 'M' && Caracter != 'T' && Caracter != 'N')
{
MessageBox.Show("Debe de Ingresar sólo letras M, T o N", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Information);
txtTurno.Text = "";
txtTurno.Focus();
return; //OJO
}
else
txtPromedio.Focus();
}
else
{
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 26/48
txtTurno.Text = "";
if (Letra != "M" && Letra != "T" && Letra != "N")
{
MessageBox.Show("Debe de Ingresar sólo letras M, T o N", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Information);
txtTurno.Focus();
btNuevo.Enabled = false;
btSalir.Enabled = false;
}
}
}
ingresados();
else
{
MessageBox.Show("Debe de Ingresar sólo número", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Information);
txtPromedio.Text = "";
txtPromedio.Focus();
btNuevo.Enabled = false;
btSalir.Enabled = false;
}
}
char Caracter;
Visual Basic
txtFecIng.Text = ""
txtTurno.Text = ""
txtPromedio.Text = ""
btNuevo.Enabled = False
btSalir.Enabled = False
txtApeNom.Focus()
End Sub
Function Minuscula(ByVal v) As Boolean
'verifica si es mayuscula
If (v >= 97 And v <= 122) Then
Minuscula = True
Else
Minuscula = False
End If
End Function
btNuevo.Enabled = True
btSalir.Enabled = True
Else
btNuevo.Enabled = False
btSalir.Enabled = False
End If
End Function
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 30/48
End Sub
End Sub
End Sub
If Ascii = 32 Then
Temp = Microsoft.VisualBasic.Left(txtApeNom.Text, Longitud)
Caracter = Microsoft.VisualBasic.Right(txtApeNom.Text, 1)
Caracter = UCase(Caracter)
txtApeNom.Text = ""
txtApeNom.Text = Temp + Caracter
txtApeNom.SelectionStart = Longitud + 1
End If
End Sub
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 31/48
txtPromedio.SelectionStart = 0
txtPromedio.SelectionLength = Len(txtPromedio.Text)
txtPromedio.Text = txtPromedio.SelectedText
txtPromedio.Focus()
btNuevo.Enabled = False
btSalir.Enabled = False
Else
ingresados()
End If
End Sub
End Class
2. El siguiente programa permite ingresar los datos del trabajador y al seleccionar el tipo de pago del trabajador,
automáticamente nos hallará el pago por hora y tendremos que ingresar las horas trabajadas.
C#
a) Creamos un nuevo proyecto en C# con el nombre de Laboratorio02-05CS
namespace Laboratorio02_05CS
{
public partial class frmLaboratorio02 : Form
{
int index ; //indice del item seleccionado
public frmLaboratorio02()
{
InitializeComponent();
}
break;
case 2:
lblPagoXHora.Text = "5";
break;
}
if (txtHorasTrab.Text.Trim() == "" )
txtHorasTrab.Focus();
else
lblTotal.Text = (Convert.ToInt32(lblPagoXHora.Text) *
Convert.ToInt32(txtHorasTrab.Text)).ToString("###,##0.00");
}
cboTipo.Items.Add("Permanente");
cboTipo.Items.Add("Contratado");
cboTipo.Items.Add("Eventual");
btNuevo.Enabled = false;
}
else
btNuevo.Enabled = true;
}
txtNombre.Focus();
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 36/48
Visual Basic
cboTipo.SelectedIndex = 1
btNuevo.Enabled = False
End Sub
Me.Close()
End Sub
Else
btNuevo.Enabled = True
End If
End Sub
Index = cboTipo.SelectedIndex
Select Case Index
Case 0
lblPagoXHora.Text = "15.00"
Case 1
lblPagoXHora.Text = "10.00"
Case 2
lblPagoXHora.Text = "5.00"
End Select
End Sub
txtNombre.Text = ""
cboTipo.SelectedIndex = 0
lblPagoXHora.Text = ""
txtHorasTrab.Text = ""
lblTotal.Text = ""
txtNombre.Focus()
End Sub
End Class
3. El siguiente programa permite realizar la proforma de compra de una computadora, mostrándonos el precio de
la computadora, impresora, el subtotal, el igv y el total a pagar.
C#
1. Creamos un nuevo proyecto en C# con el nombre de Laboratorio02-06CS
Font/size 10
namespace Laboratorio02_06CS
{
public partial class frmLaboratorio02 : Form
{
//indice del item seleccionado
int index;
public frmLaboratorio02()
{
InitializeComponent();
}
cboComputadoras.Items.Add("Packer Bell");
cboComputadoras.Items.Add("Acer");
cboImpresoras.Items.Add("Epson LX-300");
cboImpresoras.Items.Add("Deskject 400");
cboImpresoras.Items.Add("IBM graphics");
cboComputadoras.SelectedIndex = 0;
cboImpresoras.SelectedIndex = 0;
Borrar();
Visual Basic
cboImpresoras.Items.Add("Epson LX-300")
cboImpresoras.Items.Add("Deskject 400")
cboImpresoras.Items.Add("IBM graphics")
cboComputadoras.SelectedIndex = 0
cboImpresoras.SelectedIndex = 0
Borrar()
End Sub
PROBLEMAS PROPUESTOS
1. Una empresa de bienes raíces ofrece casas de interés social, bajo las siguientes condiciones:
Si los ingresos del comprador son menores de $8000 la inicial será del 15% del costo de la casa y el resto
se distribuirá en pagos mensuales, a pagar en 10 años.
Si los ingresos del comprador son mayores de $8000 o menos de $12000, la inicial será del 30% del costo
de la casa y el resto se distribuirá en pagos mensuales a pagar en 7 años.
Si los ingresos del comprador son mayores de $12000 la inicial será del 35% del costo de la casa y el resto
se distribuirá en pagos mensuales, a pagar en 5 años.
La empresa quiere obtener cuanto debe pagar un comprador por concepto de inicial y cuanto por cada pago
parcial. (mensual)
2. Se necesita un sistema que calcula el salario semanal de n trabajadores, el cual depende de su puesto
(licenciado, técnico y obrero), del turno (primero, segundo y tercero) y las horas trabajadas. Donde los del
primer turno ganan $200 adicionales a su salario, los del segundo $100 y los del tercero $300; El obrero
gana $30 por hora, el técnico $50 y el licenciado $100.
3. Se necesita un sistema que lea los votos obtenidos por tres candidatos a presidente municipal en la ciudad
y calcule e imprima al ganador, junto con el porcentaje obtenido de votos.
5. En un supermercado un cajero captura los precios de los artículos que los clientes compran e indica a cada
cliente cual es el monto de lo que deben pagar. Al final del día le indica a su supervisor cuanto fue lo que
cobro en total a todos los clientes que pasaron por su caja.
6. Un teatro otorga descuentos según la edad del cliente. determinar la cantidad de dinero que el teatro deja
de percibir por cada una de las categorías. Tomar en cuenta que los niños menores de 5 años no pueden
entrar al teatro y que existe un precio único en los asientos. Los descuentos se hacen tomando en cuenta el
siguiente cuadro:
Edad Descuento
Categoría 1 5 - 14 35 %
Categoría 2 15 - 19 25 %
Categoría 3 20 - 45 10 %
Categoría 4 46 - 65 25 %
Categoría 5 66 en adelante 35 %
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 48/48