Vous êtes sur la page 1sur 48

DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 1/48

Sesión Nro. 03
Tema: CONTROLES WINDOWS FORM BÁSICOS Ciclo: V
Sección: 3217
Docente: Ing. Aníbal Sardón Paniagua Fecha:

OBJETIVOS:

 Descubrir los controles Windows Form básicos.


 Conocer las propiedades y métodos de los controles básicos para formularios Windows.
 Aprender a utilizar la Programación Basada en Eventos de los Windows Form

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:

PROGRAMACIÓN BASADA EN EVENTOS

La programación dirigida por eventos es un paradigma de programación en el que tanto la estructura


como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema,
definidos por el usuario o que ellos mismos provoquen.

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.

Patrón de Diseño de Manejadores de Eventos

Es un modelo de control de flujo de datos.


En el diagrama se muestra el siguiente
proceso:

1. Un flujo de datos invoca eventos


(transacciones)
2. Un disparador los envía a manejadores
especializados (centro de transacciones)
3. Un conjunto de manejadores que se
encargan de realizar operaciones sobre
el flujo de datos

El trabajo del disparador es analizar los


eventos para determinar su naturaleza y
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 2/48

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.

JERARQUÍA DE CLASES DE LOS WINDOWS FORM CONTROLS

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

Image Property Imagen mostrada en el Label.


Font Property Tipo de fuente con la cual es mostrada el texto en el Label.
Text Property Texto displayado en el Label.
TextAlign Property Tipo de alineación con la que el texto es mostrado en el Label. Se puede
seleccionar entre las 3 horizontales (Center, Left, or Right) y una de las tres
posiciones vereticales (Bottom, Middle, or Top).

Miembros importantes de la clase LinkLabel

Miembros Tipo Descripción


ActiveLinkColor Property Color usado para mostrar un link activo.
DisabledLinkColor Property Color usado para mostrar un link desactivado.

Links Property Retorna una colección de objetos Link en el LinkLabel. La clase


Link contiene información acerca del hyperlink. Esta propiedad
LinkData permite asociar una URL con un hyperlink.
LinkArea Property Especifica la porción del texto en el LinkLabel que es tratada como
parte del link.
LinkBehavior Property Especifica como el link aparece cuando el punter del mouse pasa por
encima.
LinkClicked Event Evento por defecto, generado cuando se hace clic sobre el link. El
parámetro LinkLabelLinkClickedEventArgs provee de los datos
para el evento.
LinkColor Property Color usado para mostrar un link.
VisitedLinkColor Property Color usado para mostrar un link visitado.

Visual Basic

Control Propiedad Valor


Form1 Name frmLaboratorio02
Text Laboratorio02-01VB
FormBorderStyle FixedSingle

LinkLabel Name lnkWinForms


Text Winforms Community WebSite

LinkLabel Name lnkPrograms


Text Ejecutar Calculadora | Abrir Unidad C:
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 4/48

Partial Class frmLaboratorio02


Inherits System.Windows.Forms.Form

Public Sub New()


MyBase.New()
' This call is required by the Windows Form Designer.
InitializeComponent()

' Add any initialization after the InitializeComponent() call.

' Agrega link´para la calculadora en


' la primera mitad del LinkLabel

lnkPrograms.Links.Add(0, "Ejecutar Calculadora".Length, "calc.exe ")


' Agrega link´para la Unidad C:
' la segunda mitad del LinkLabel
lnkPrograms.Links.Add(lnkPrograms.Text.IndexOf("Abrir Unidad C:"), _
"Abrir Unidad C:".Length, "c:\\")

' activa la propiedad Autosize


lnkPrograms.AutoSize = True
End Sub

Private Sub lnkWinForms_LinkClicked(ByVal sender As System.Object, ByVal e As


System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles lnkWinForms.LinkClicked

lnkWinForms.LinkVisited = True
' abre la pagina Windows Forms Community Website
System.Diagnostics.Process.Start("IExplore", "http://www.windowsforms.net")

End Sub

Private Sub lnkPrograms_LinkClicked(ByVal sender As System.Object, ByVal e As


System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles lnkPrograms.LinkClicked
' ejecuta el programa almacenado en el hipervínculo

System.Diagnostics.Process.Start(e.Link.LinkData.ToString())

End Sub
End Class

C#
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 5/48

Control Propiedad Valor


Form1 Name frmLaboratorio02
Text Laboratorio02-01CS
FormBorderStyle FixedSingle

LinkLabel Name lnkWinForms


Text Winforms Community WebSite

LinkLabel Name lnkPrograms


Text Ejecutar Calculadora | Abrir Unidad C:

namespace Laboratorio02_01CS
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

lnkPrograms.Links.Add(0, "Ejecutar Calculadora".Length, "calc.exe ");


// Agrega link´para la Unidad C:
// la segunda mitad del LinkLabel
lnkPrograms.Links.Add(lnkPrograms.Text.IndexOf("Abrir Unidad C:"), "Abrir
Unidad C:".Length, "c:\\");

// activa la propiedad Autosize


lnkPrograms.AutoSize = true;
}

private void lnkWinForms_LinkClicked(object sender,


LinkLabelLinkClickedEventArgs e)
{
lnkWinForms.LinkVisited = true;
// abre la pagina Windows Forms Community Website
System.Diagnostics.Process.Start("IExplore",
"http://www.windowsforms.net");

private void lnkPrograms_LinkClicked(object sender,


LinkLabelLinkClickedEventArgs e)
{
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 6/48

// ejecuta el programa almacenado en el hipervínculo

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

Miembros Tipo Descripción


DetectUrls Property Determina si el control puede detactar automáticamente formatos URLs.
SelectionColor Property Color del texto seleccionado.

SelectionFont Property Tipo de fuente del texto seleccionado.


SelectedRtf Property Texto RTF seleccionado.
TextChanged Event Evento por defecto. Ocurre cuando el valor 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.
ZoomFactor Property Nivel actual del zoom .

Button, CheckBox, and RadioButton


Un objeto botón inicializa una acción específica cuando el usuario hace clic sobre él. La clase Button
deriva de la clase ButtonBase. La clase ButtonBase provee la funcionalidad común de las clases Button,
CheckBox y RadioButton.
Los controles CheckBox y RadioButton mantienen un estado. Ellos pueden estar encendidos o
apagados (selected or unselected, checked or unchecked). Estos controles son comúnmente usados en
grupos. Los CheckBox permiten a usuario seleccionar una o más opciones, mientras que el RadioButton
permite seleccionar una de varias opciones. Si se desea poner 2 grupos de controles RadioButton en
formulario donde cada grupo se seleccione independientemente, se puede independizar cada grupo con
un control contenedor como el control GroupBox.

Miembros importantes de la clase Button


Miembros Tipo Descripción
Image Property Imagen mostrada en el Button.
Text Property Texto mostrado en el Button.
Click Event Evento por defecto. Se ejecuta cuando se hace clic sobre el botón.

Miembros importantes de la clase CheckBox


Miembros Tipo Descripción
Checked Property Retorna True si el control CheckBox ha sido seleccionado, sino es False.
CheckedChanged Event Evento por defecto. Se lanza cada vez que un control check box es
marcadao o desmarcado (checked , unchecked).
CheckState Property Estado del check box. Éste valor es uno de los valores Enumerados
CheckState: Checked, Unchecked, or Indeterminate.
ThreeState Property Indica si el control Check box permite tres estados Checked, Unchecked,
and Indeterminate. Si es False, el CheckState puede cambiarse a
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 8/48

Indeterminate solo por código y no por la interface de usuario.


Text Property Texto mostrado con el control Checkbox.

Miembros importantes de la clase RadioButton


Miembros Tipo Descripción
Checked Property Indica si el Radio Button es checked. Retorna True si es checked, y False
sino.
CheckedChanged Event Evento por defecto del RadioButton. Se lanza cada vez que el control es
marcado o desmarcado.
Text Property Texto mostrado con el RadioButton.

Visual Basic

Control Propiedad Valor


Form1 Name frmLaboratorio02
Text Laboratorio02-02VB
FormBorderStyle FixedSingle

Label1 Name lblSampleText


Text TEXTO DE EJEMPLO
Autosize False
TexyAlign MiddleCenter

Groupbox1 Name grpSampleText


Text Texto

Groupbox2 Name grpEffects


Text Efectos

Groupbox3 Name grpFontSize


Text Tamaño de Fuente

Checkbox1 Name cbStrikeout


Text Tachado

Checkbox2 Name cbUnderline


Text Subrayado

Radiobutton1 Name rb12Points


Text 12 ptos

Radiobutton1 Name rb14Points


Text 14 ptos

Radiobutton1 Name rb16Points


Text 16 ptos
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 9/48

Partial Class frmLaboratorio02


Inherits System.Windows.Forms.Form

Private Sub cbStrikeout_CheckedChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles cbStrikeout.CheckedChanged

' aplica el estilo Strikeout al label lblSampleText


lblSampleText.Font = New Font(lblSampleText.Font.Name, _
lblSampleText.Font.Size, _
lblSampleText.Font.Style Xor FontStyle.Strikeout)

'lblSampleText.Font.Style Xor FontStyle.Underline


'combina el estilo actual con Strikeout
End Sub

Private Sub cbUnderline_CheckedChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles cbUnderline.CheckedChanged

' aplica el estilo al label lblSampleText


lblSampleText.Font = New Font(lblSampleText.Font.Name, _
lblSampleText.Font.Size, _
lblSampleText.Font.Style Xor FontStyle.Underline)

'lblSampleText.Font.Style Xor FontStyle.Underline


'combina el estilo actual con Underline

End Sub

Private Sub rb12Points_CheckedChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles rb12Points.CheckedChanged

' cambia a 12 el tamaño de letra lblSampleText


lblSampleText.Font = _
New Font(lblSampleText.Font.Name, 12,lblSampleText.Font.Style)
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 10/48

End Sub

Private Sub rb14Points_CheckedChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles rb14Points.CheckedChanged

' cambia a 14 el tamaño de letra lblSampleText


lblSampleText.Font = New Font(lblSampleText.Font.Name, 14, _
lblSampleText.Font.Style)

End Sub

Private Sub rb16Points_CheckedChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles rb16Points.CheckedChanged

' cambia a 16 el tamaño de letra lblSampleText


lblSampleText.Font = New Font(lblSampleText.Font.Name, 16, _
lblSampleText.Font.Style)

End Sub
End Class

C#

Control Propiedad Valor


Form1 Name frmLaboratorio02
Text Laboratorio02-02CS
FormBorderStyle FixedSingle

Label1 Name lblSampleText


Text TEXTO DE EJEMPLO
Autosize False
TexyAlign MiddleCenter

Groupbox1 Name grpSampleText


Text Texto

Groupbox2 Name grpEffects


Text Efectos

Groupbox3 Name grpFontSize


Text Tamaño de Fuente

Checkbox1 Name cbStrikeout


Text Tachado

Checkbox2 Name cbUnderline


Text Subrayado

Radiobutton1 Name rb12Points


Text 12 ptos

Radiobutton1 Name rb14Points


Text 14 ptos
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 11/48

Radiobutton1 Name rb16Points


Text 16 ptos

namespace Laboratorio02_02CS
{
public partial class frmLaboratorio02 : Form
{
public frmLaboratorio02()
{
InitializeComponent();
}

private void cbStrikeout_CheckedChanged(object sender, EventArgs e)


{
// aplica el estilo Strikeout al label lblSampleText
lblSampleText.Font = new Font(lblSampleText.Font.Name, lblSampleText.Font.Size,
lblSampleText.Font.Style ^ FontStyle.Strikeout);

//lblSampleText.Font.Style ^ FontStyle.Strikeout --> ^ operador XOR a


nivel de bits
//combina el estilo actual con Strikeout
}

private void cbUnderline_CheckedChanged(object sender, EventArgs e)


{
// aplica el estilo al label lblSampleText
lblSampleText.Font = new Font(lblSampleText.Font.Name,
lblSampleText.Font.Size, lblSampleText.Font.Style ^
FontStyle.Underline);

//lblSampleText.Font.Style ^ FontStyle.Underline --> ^ operador XOR a


nivel de bits
//combina el estilo actual con Underline
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 12/48

private void rb12Points_CheckedChanged(object sender, EventArgs e)


{
// cambia a 12 el tamaño de letra lblSampleText
lblSampleText.Font = new Font(lblSampleText.Font.Name, 12,
lblSampleText.Font.Style);
}

private void rb14Points_CheckedChanged(object sender, EventArgs e)


{
// cambia a 14 el tamaño de letra lblSampleText
lblSampleText.Font = new Font(lblSampleText.Font.Name, 14,
lblSampleText.Font.Style);
}

private void rb16Points_CheckedChanged(object sender, EventArgs e)


{
// cambia a 16 el tamaño de letra lblSampleText
lblSampleText.Font = new Font(lblSampleText.Font.Name, 16,
lblSampleText.Font.Style);
}
}
}

ListBox, CheckedListBox, y ComboBox


El control ListBox permite seleccionar uno o más valores de una lista de valores. Éste deriva de la clase
base ListControl, que provee de la funcionalidad común para los controles Listbox yCombobox.

Miembros importantes de la clase ListBox


Miembros Tipo Descripción
ColumnWidth Property Ancho de la columna en un multicolumn list box.
ItemHeight Property Altura de un ítem en un Listbox.
Items Property Una colección de objetos que representa la lista de ítems en un
Listbox.
FindString Method Encuentra el primer ítem en el ListBox que empiece con una
cadena específica.
FindStringExact Method Encuentra el primer ítem en el ListBox que coincida con una
cadena específica.
MultiColumn Property Especifica si el ListBox soporta múltiple columnas.
SelectedIndex Property Retorna el índice del ítem actual.
SelectedIndexChanged Event Evento por defecto. Ocurre cuando la propiedad SelectedIndex
cambia.
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 13/48

SelectedIndices Property Colección de indices de los indices actualmente seleccionados.


SelectedItem Property Item seleccionado actualmente.
SelectedItems Property Colección de items seleccionados actualmente.
SelectionMode Property Indica el número de items que puede ser seleccionado. Los
valores son especificados por el tipo enumerado SelectionMode.
Ellos pueden ser MultiSimple (permite múltiple selecciones),
MultiExtended (permite múltiples selecciones con ayuda del botón
Ctrl, Shift y las flechas del teclado), None (sin selección) and One
(permite una sóla selección).
Sorted Property Indica si los ítems son ordenados alfabéticamente.

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.

Miembros importantes de la clase CheckedListBox


Miembros Tipo Descripción
CheckedIndices Property Colección de índices de los ítems actualmente seleccionados..

CheckedItems Property Colección de ítems actualmente seleccionados.


ItemCheck Event Ocurre cuando un ítem es seleccionado o deseleccionado.
SelectionMode Property Indica el número de items que puede ser seleccionado. El valor es
especificado por el tipo enumerado SelectionMode y puede ser None (sin
selección) o One (permite múltiple selecciones).

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.

Miembros importantes de la clase ComboBox


Miembros Tipo Descripción
DropDownStyle Property Representa el estilo del ComboBox. Éste valor es especificado por
el tipo enumerado DropDownStyle : DropDown (estilo por defecto,
se hace clic sobre el botón flecha para mostrar los items y la parte
del texto es editable, DropDownList (se hace clic sobre el botón
flecha para mostrar los ítems y la porción de texto no puede ser
editado) y Simple (no hay botón flecha, la parte de la lista es
siempre visible y la parte del texto es también editable).
DropDownWidth Property Ancho de la lista desplegable en el ComboBox.
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 14/48

Items Property Colección de items en el control ComboBox.


MaxDropDownItems Property Representa el máximo número de items que la lista desplegable
puede mostrar. Si el número de items es mayor que el indicado en
ésta propiedad, aparecerá un scrollbar.
MaxLength Property Indica el tamaño máximo del texto que puede ser ingresado en la
parte editable del ComboBox.
SelectedIndex Property Índice del item seleccionado.
SelectedIndexChanged Event Evento por defecto. Ocurre cuando la propiedad selected index
cambia.
SelectedItem Property Ítem seleccionado actualmente.
SelectedText Property Texto seleccionado actualmente en la parte editable del
ComboBox.
Sorted Property Indica si los ítems son ordenados alfabéticamente.

Visual Basic

Control Propiedad Valor


Form1 Name frmLaboratorio02
Text Laboratorio02-03VB
FormBorderStyle FixedSingle

Label1 Name lblSeleccionar


Text Seleccionar estados:

Label2 Name lblSeleccionados


Text Estados Seleccionados:

CheckedListBox Name clbScripts


Items Latin
Greek
Cyrillic
Armenian
Hebrew
Arabic
Devanagari
Bengali
Gurmukhi
Gujarati
Oriya
Tamil
Telugu
Kannada
Malayalam
Thai
Lao
Georgian
Tibetan
Japanese Kana
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 15/48

Listbox Name lbSelectedScripts


SelectionMode MultiSimple

Button Name btMostrar


Text &Mostrar Seleccionados

'agregar ésta línea de código al inicio


'para manipular cadenas con la clase StringBuilder
Imports System.Text

Public Class frmLaboratorio02

Private Sub clbScripts_ItemCheck(ByVal sender As Object, ByVal e As


System.Windows.Forms.ItemCheckEventArgs) Handles clbScripts.ItemCheck
' obtiene el ITEM marcado o desmarcado
Dim item As String = clbScripts.SelectedItem.ToString()

If e.NewValue = CheckState.Checked Then


' Checked: Agregar a ListBox
lbSelectedScripts.Items.Add(item)
Else
' Unchecked: Elimina del ListBox
lbSelectedScripts.Items.Remove(item)
End If

End Sub

Private Sub btMostrar_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btMostrar.Click
'declara e instancia un objeto StringBuilder
Dim sbLanguages As StringBuilder = New StringBuilder()

If lbSelectedScripts.SelectedItems.Count > 0 Then


DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 16/48

sbLanguages.Append( _
"Ud. Seleccionó:" & vbCrLf & vbCrLf)
' Si hay items seleccionados en el ListBox
' crea una cadena con sus nombres

Dim item As String


For Each item In lbSelectedScripts.SelectedItems
sbLanguages.Append(item & vbCrLf)
Next
Else
' No hay items seleccionados
sbLanguages.Append("no existen ITEMS seleccionados en el List Box")
End If
MessageBox.Show(sbLanguages.ToString(), _
"Estados Seleccionados", _
MessageBoxButtons.OK, MessageBoxIcon.Information)

End Sub
End Class

C#

Control Propiedad Valor


Form1 Name frmLaboratorio02
Text Laboratorio02-03VB
FormBorderStyle FixedSingle

Label1 Name lblSeleccionar


Text Seleccionar estados:

Label2 Name lblSeleccionados


Text Estados Seleccionados:

CheckedListBox Name clbScripts


Items Latin
Greek
Cyrillic
Armenian
Hebrew
Arabic
Devanagari
Bengali
Gurmukhi
Gujarati
Oriya
Tamil
Telugu
Kannada
Malayalam
Thai
Lao
Georgian
Tibetan
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 17/48

Japanese Kana

Listbox Name lbSelectedScripts


SelectionMode MultiSimple

Button Name btMostrar


Text &Mostrar Seleccionados

/*
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();
}

private void clbScripts_ItemCheck(object sender, ItemCheckEventArgs e)


{
// obtiene el ITEM marcado o desmarcado
string item = clbScripts.SelectedItem.ToString();

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

private void btMostrar_Click(object sender, EventArgs e)


{
//declara e instancia un objeto StringBuilder
StringBuilder sbLanguages = new StringBuilder();

if( lbSelectedScripts.SelectedItems.Count > 0 )


{
sbLanguages.Append( "Ud. Seleccionó:" + "\n \n");
/* Si hay items seleccionados en el ListBox
crea una cadena con sus nombres
*/

foreach (string item in lbSelectedScripts.SelectedItems)


{
sbLanguages.Append(item + "\n");
}
}
else
// No hay items seleccionados
sbLanguages.Append("no existen ITEMS seleccionados en el List Box");

MessageBox.Show(sbLanguages.ToString(), "Estados Seleccionados",


MessageBoxButtons.OK, MessageBoxIcon.Information);

}
}
}

LA CLASE System.Convert

La clase System.Convert proporciona un conjunto de métodos para efectuar conversiones de tipo.


Estos métodos pueden sustituir conversiones explícitas y utilizarse para convertir a y desde cadenas
a números, DateTime y boléanos, y también a y desde boléanos a números.

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.

Utilizando el método Parse

Console.Write("Indique el número de metros ");


double metros = double.Parse(Console.ReadLine()); // Se lee el valor por teclado y
//se convierte al tipo double
double pulgadas=metros *39.27;
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 19/48

double pies = pulgadas /12;


pulgadas = pulgadas % 12; // es posible aplicar % a reales
pies = pies - pulgadas/12;
Console.WriteLine("Conversión de metros en un complejo " + "de pies y pulgadas");
Console.WriteLine("{0} metros son {1} pies y {2:##.###} pulgadas", metros, pies , pulgadas);

Utilizando el método Convert

Console.Write("Indique el número de metros ");


double metros = Convert.ToDouble(Console.ReadLine());
double pulgadas=metros *39.27;
double pies = pulgadas /12;
pulgadas = pulgadas % 12; // es posible aplicar % a reales
pies = pies - pulgadas/12;
Console.WriteLine("Conversión de metros en un complejo " + "de pies y pulgadas");
Console.WriteLine("{0} metros son {1} pies y {2:##.###} pulgadas", metros, pies , 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:

 Los números generados están dentro de un cierto rango de valores


 La probabilidad de que se genere un número determinado es la misma que la de cualquier otro
número del rango

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

a) Creamos un nuevo proyecto en C# con el nombre de Laboratorio02-04CS

b) Realizamos el siguiente diseño agregando los controles indicados en la tabla siguiente:

Control Propiedad Valor


Form1 Name frmLaboratorio01
Text Laboratorio01-04CS
FormBorderStyle FixedSingle
AcceptButton btCalcular

Button1 Name btCalcular


Text &Calcular
Font/size 10

TextBox1 Name txtPresupuesto


Font/size 10

TextBox2 Name txtResultado


Scrollbars Vertical
Multiline true
Font/size 10
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 22/48

Label1 Text Ingrese Presupuesto Anual


Font/size 10

Label2 Text Resultado


Font/size 10

c) Agregamos el siguiente código en los eventos correspondientes:

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();
}

public void Limpiar()


{
//limpia el contenidos de controles y desactiva botones
txtApeNom.Text = "";
txtFecIng.Text = "";
txtTurno.Text = "";
txtPromedio.Text = "";
btNuevo.Enabled = false;
btSalir.Enabled = false;
txtApeNom.Focus();
}
public bool Minuscula(object v)
{
//verifica si es mayuscula
if (Convert.ToInt32(v) >= 97 && Convert.ToInt32(v) <= 122)
return true;
else
return false;
}

public bool mayuscula(object v)


{
//verifica si es mayusculas
if (Convert.ToInt32(v) >= 65 && Convert.ToInt32(v) <= 90)
return true;
else
return false;
}

public bool numero(object v)


{//verifica si es un numero
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 23/48

if (Convert.ToInt32(v) < 48 || Convert.ToInt32(v) > 57)


return false;
else
return true;
}

public bool especial(object v)


{
//verifica si es un caracter especial
if (Convert.ToInt32(v) == 13 || Convert.ToInt32(v) == 32 ||
Convert.ToInt32(v) == 8 || Convert.ToInt32(v) == 225 ||
Convert.ToInt32(v) == 233 || Convert.ToInt32(v) == 237 ||
Convert.ToInt32(v) == 243 || Convert.ToInt32(v) == 250 ||
Convert.ToInt32(v) == 241 ||
Convert.ToInt32(v) == 209)

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;
}

private void frmLaboratorio02_Load(object sender, EventArgs e)


{
Limpiar();
}
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 24/48

private void btNuevo_Click(object sender, EventArgs e)


{
Limpiar();
}

private void btSalir_Click(object sender, EventArgs e)


{

if (MessageBox.Show("¿Desea salir de la aplicación?", "Cuidado",


MessageBoxButtons.YesNo,
MessageBoxIcon.Exclamation) == System.Windows.Forms.DialogResult.Yes)
this.Close(); //this.Close() equivale a Me.Close()
}

private void txtApeNom_KeyPress(object sender, KeyPressEventArgs e)


{
/* El primer carácter de cada nombre o apellido
debe convertirse en mayúscula y el resto en minúsculas
*/
int Longitud, Ascii;
string Temp ;
char Caracter ;
if( Convert.ToInt32(e.KeyChar) == 13)
txtFecIng.Focus();

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
}

//equivale a MID(), extrae subcadena


Caracter = char.Parse(txtApeNom.Text.Substring(Longitud -1, 1));
Ascii = Convert.ToInt32(Caracter); // convierte un CHAR a ASC

if (Ascii == 32)
{
// extrae de la IZQUIERDA una cantidad de caracteres, equivale a LEFT
Temp = txtApeNom.Text.Substring(0, Longitud);

// 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 = "";
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 25/48

txtApeNom.Text = Temp + Caracter;


txtApeNom.SelectionStart = Longitud + 1;
}
}

private void txtFecIng_Leave(object sender, EventArgs e)


{
// se ejecuta antes de perder el foco LostFocus

// debe verificar si la fecha ingresada este correcta

// llamada a nuestra funcion IsDateTime, verifica fecha valida


if (IsDateTime(txtFecIng.Text) && txtFecIng.Text.Length > 0)
ingresados();
else
{
MessageBox.Show("Debe de ingresar una fecha correcta", "Cuidado");
txtFecIng.SelectionStart = 0;
txtFecIng.SelectionLength = txtFecIng.Text.Length;
txtFecIng.Text = txtFecIng.SelectedText;
txtFecIng.Focus();
}
}

private void txtFecIng_KeyPress(object sender, KeyPressEventArgs e)


{
//salta al siguiente campo
if( Convert.ToInt32(e.KeyChar) == 13 ) //convierte de CHAR a ASC
txtTurno.Focus();
}

private void txtTurno_KeyPress(object sender, KeyPressEventArgs e)


{
// En el turno solo debe aceptar las letras M, T y N

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;
}
}
}

private void txtPromedio_KeyPress(object sender, KeyPressEventArgs e)


{
if (numero(Convert.ToInt32(e.KeyChar)) ||
Convert.ToInt32(e.KeyChar) == 8 || Convert.ToInt32(e.KeyChar) == 13)

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;
}
}

private void txtPromedio_TextChanged(object sender, EventArgs e)


{
if (Convert.ToInt32(txtPromedio.Text) < 0 ||
Convert.ToInt32(txtPromedio.Text) > 20)
{
MessageBox.Show("El promedio debe estar entre 0 y 20", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Information);
txtPromedio.SelectionStart = 0;
txtPromedio.SelectionLength = txtPromedio.Text.Length;
txtPromedio.Text = txtPromedio.SelectedText;
txtPromedio.Focus();
btNuevo.Enabled = false;
btSalir.Enabled = false;
}
else
ingresados();
}

private void txtApeNom_TextChanged(object sender, EventArgs e)


{
ingresados();
}

private void txtTurno_TextChanged(object sender, EventArgs e)


{
ingresados();
}
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 27/48

private void txtTurno_Leave(object sender, EventArgs e)


{
// se ejecuta antes de perder el foco LostFocus

char Caracter;

// extrae una caracter 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();
}
}
}

Visual Basic

a) Creamos un nuevo proyecto en Visual Basic con el nombre de Laboratorio02-04VB

b) Realizamos el siguiente diseño agregando los controles indicados en la tabla siguiente:


DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 28/48

Control Propiedad Valor


Form1 Name frmLaboratorio02
Text Laboratorio01-04VB
FormBorderStyle FixedSingle
AcceptButton btNuevo

Button1 Name btNuevo


Text &Nuevo
Font/size 10

TextBox1 Name txtApeNom


Font/size 10

TextBox2 Name txtFecIng


Font/size 10

TextBox3 Name txtTurno


Font/size 10

TextBox4 Name txtPromedio


Font/size 10

Label1 Text Nombres y apellidos:


Font/size 10

Label2 Text Fecha de Ingreso:


Font/size 10

Label3 Text Turno (M T N)


Font/size 10

Label4 Text Promedio (0 a 20)


Font/size 10

c) Agregamos el siguiente código en los eventos correspondientes :

Public Class frmLaboratorio02


Sub Limpiar()
'limpia el contenidos de controles y desactiva botones
txtApeNom.Text = ""
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 29/48

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

Function mayuscula(ByVal v) As Boolean


'verifica si es mayusculas
If (v >= 65 And v <= 90) Then
mayuscula = True
Else
mayuscula = False
End If
End Function

Function numero(ByVal v) As Boolean


'verifica si es un numero
If (v < 48 Or v > 57) Then
numero = False
Else
numero = True
End If
End Function

Function especial(ByVal v) As Boolean


'verifica si es un caracter especial
If (v = 13 Or v = 32 Or v = 8 Or v = 225 Or v = 233 Or v = 237
Or v = 243 Or v = 250 Or v = 241 Or v = 209) Then
especial = True
Else
especial = False
End If
End Function
Function ingresados() As Boolean
'valida si se han ingresado todos los datos
If Trim(txtApeNom.Text) <> "" And IsDate(txtFecIng.Text) And
Trim(txtTurno.Text) <> "" And Trim(txtPromedio.Text) <> "" Then

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

Private Sub frmLaboratorio02_Load(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles MyBase.Load
Limpiar()

End Sub

Private Sub btNuevo_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles btNuevo.Click
Limpiar()

End Sub

Private Sub btSalir_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles btSalir.Click

If MsgBox("¿Desea salir de la aplicación?",


MsgBoxStyle.YesNo, "Cuidado") = MsgBoxResult.Yes Then
Me.Close()
End If

End Sub

Private Sub txtApeNom_KeyPress(ByVal sender As System.Object,


ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtApeNom.KeyPress
' El primer carácter de cada nombre o apellido
'debe convertirse en mayúscula y el resto en minúsculas

Dim Longitud, Ascii As Integer


Dim Temp As String
Dim Caracter As Char
If Asc(e.KeyChar) = 13 Then
txtFecIng.Focus()
End If
Longitud = (txtApeNom.TextLength) - 1
If Longitud < 1 Then
Longitud = Longitud + 1
Caracter = Microsoft.VisualBasic.Right(txtApeNom.Text, 1)
Caracter = UCase(Caracter)
txtApeNom.Text = ""
txtApeNom.Text = Caracter
txtApeNom.SelectionStart = Longitud + 1
Exit Sub
End If

Caracter = Mid(txtApeNom.Text, Longitud, Longitud)


Ascii = Asc(Caracter)

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

Private Sub txtFecIng_Leave(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles txtFecIng.Leave
' se ejecuta antes de perder el foco LostFocus

' debe verificar si la fecha ingresada este correcta


If IsDate(txtFecIng.Text) Then
ingresados()
Else
MsgBox("Debe de ingresar una fecha correcta",
MsgBoxStyle.Information, "Cuidado")
txtFecIng.SelectionStart = 0
txtFecIng.SelectionLength = Len(txtFecIng.Text)
txtFecIng.Text = txtFecIng.SelectedText
txtFecIng.Focus()
End If
End Sub

Private Sub txtFecIng_KeyPress(ByVal sender As System.Object,


ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtFecIng.KeyPress
'salta al siguiente campo
If Asc(e.KeyChar) = 13 Then
txtTurno.Focus()
End If
End Sub

Private Sub txtTurno_KeyPress(ByVal sender As System.Object,


ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTurno.KeyPress
' En el turno solo debe aceptar las letras M, T y N

Dim Letra As String


Dim Caracter As Char
Letra = UCase(e.KeyChar)
If Asc(e.KeyChar) = 13 Then
Caracter = Microsoft.VisualBasic.Left(txtTurno.Text, 1)
If Caracter <> "M" And Caracter <> "T" And Caracter <> "N" Then
MsgBox("Debe de Ingresar sólo letras M, T o N",
MsgBoxStyle.Information, "Error")
txtTurno.Text = ""
txtTurno.Focus()
Exit Sub
Else
txtPromedio.Focus()
End If
Else
txtTurno.Text = ""
If Letra <> "M" And Letra <> "T" And Letra <> "N" Then
MsgBox("Debe de Ingresar sólo letras M, T o N",
MsgBoxStyle.Information, "Error")
txtTurno.Focus()
btNuevo.Enabled = False
btSalir.Enabled = False
End If
End If
End Sub

Private Sub txtPromedio_KeyPress(ByVal sender As System.Object,


DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 32/48

ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPromedio.KeyPress

If numero(Asc(e.KeyChar)) Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 13 Then


ingresados()
Else
MsgBox("Debe de Ingresar sólo número", MsgBoxStyle.Information, "Error")
txtPromedio.Text = ""
txtPromedio.Focus()
btNuevo.Enabled = False
btSalir.Enabled = False
End If
End Sub

Private Sub txtPromedio_TextChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles txtPromedio.TextChanged

If Val(txtPromedio.Text) < 0 Or Val(txtPromedio.Text) > 20 Then


MsgBox("El promedio debe estar entre 0 y 20",
MsgBoxStyle.Information, "Error")

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

Private Sub txtApeNom_TextChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles txtApeNom.TextChanged
ingresados()
End Sub

Private Sub txtTurno_TextChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles txtTurno.TextChanged
ingresados()
End Sub

Private Sub txtTurno_Leave(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles txtTurno.Leave
' se ejecuta antes de perder el foco LostFocus

Dim Caracter As Char


Caracter = Microsoft.VisualBasic.Left(txtTurno.Text, 1)
If Caracter <> "M" And Caracter <> "T" And Caracter <> "N" Then
MsgBox("Debe de Ingresar sólo letras M, T o N",
MsgBoxStyle.Information, "Error")
txtTurno.Text = ""
txtTurno.Focus()
Exit Sub
Else
txtPromedio.Focus()
End If
End Sub
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 33/48

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.

Tipo de Empleo Sueldo


Permanente 15.00
Contratado 10.00
Eventual 5.00

C#
a) Creamos un nuevo proyecto en C# con el nombre de Laboratorio02-05CS

b) Realizamos el siguiente diseño agregando los controles indicados en la tabla siguiente:

Control Propiedad Valor


Form1 Name frmLaboratorio02
Text Laboratorio01-05CS
FormBorderStyle FixedSingle
AcceptButton btNuevo

Button1 Name btNuevo


Text &Nuevo
Font/size 10

Button2 Name btSalir


Text &Salir
Font/size 10
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 34/48

TextBox1 Name txtNombre


Font/size 10

Combobox Name cboTipo


Font/size 10

Label1 Name lblPagoXHora


Font/size 10
Text “”

TextBox2 Name txtHorasTrab


Font/size 10

Label2 Name lblTotal


Text “”
Font/size 10

Button1 Name btNuevo


Text &Nuevo
Font/size 10

Button2 Name btSalir


Text &Salir
Font/size 10

c) Agregamos el siguiente código en los eventos correspondientes :

namespace Laboratorio02_05CS
{
public partial class frmLaboratorio02 : Form
{
int index ; //indice del item seleccionado

public frmLaboratorio02()
{
InitializeComponent();
}

private void cboTipo_SelectedIndexChanged(object sender, EventArgs e)


{

/*obtiene el índice del item seleccionado


calcula el total
*/
index = cboTipo.SelectedIndex;
switch (index)
{
case 0:
lblPagoXHora.Text = "15";
break;
case 1:
lblPagoXHora.Text = "10";
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 35/48

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");
}

private void frmLaboratorio02_Load(object sender, EventArgs e)


{
//carga la lista de valores del combobox

cboTipo.Items.Add("Permanente");
cboTipo.Items.Add("Contratado");
cboTipo.Items.Add("Eventual");

//item por defecto


cboTipo.SelectedIndex = 1;

btNuevo.Enabled = false;
}

private void txtNombre_TextChanged(object sender, EventArgs e)


{
if (txtNombre.Text.Trim() == "" )
btNuevo.Enabled = false;

else
btNuevo.Enabled = true;
}

private void txtHorasTrab_TextChanged(object sender, EventArgs e)


{
if (txtHorasTrab.Text.Trim() == "" ||
Convert.ToInt32(txtHorasTrab.Text) == 0)
btNuevo.Enabled = false;
else
{
btNuevo.Enabled = true;
lblTotal.Text = (Convert.ToInt32(lblPagoXHora.Text) *
Convert.ToInt32(txtHorasTrab.Text)).ToString("###,##0.00");
}
}

private void btNuevo_Click(object sender, EventArgs e)


{
txtNombre.Text = "";
cboTipo.SelectedIndex = 0;
lblPagoXHora.Text = "";
txtHorasTrab.Text = "";
lblTotal.Text = "";

txtNombre.Focus();
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 36/48

private void btSalir_Click(object sender, EventArgs e)


{
this.Close();
}
}
}

Visual Basic

a) Creamos un nuevo proyecto en Visual Basic con el nombre de Laboratorio02-05VB

b) Realizamos el siguiente diseño agregando los controles indicados en la tabla siguiente:


DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 37/48

Control Propiedad Valor


Form1 Name frmLaboratorio02
Text Laboratorio01-05VB
FormBorderStyle FixedSingle
AcceptButton btNuevo

Button1 Name btNuevo


Text &Nuevo
Font/size 10

Button2 Name btSalir


Text &Salir
Font/size 10

TextBox1 Name txtNombre


Font/size 10

Combobox Name cboTipo


Font/size 10

Label1 Name lblPagoXHora


Font/size 10
Text “”

TextBox2 Name txtHorasTrab


Font/size 10

Label2 Name lblTotal


Text “”
Font/size 10

Button1 Name btNuevo


Text &Nuevo
Font/size 10

Button2 Name btSalir


Text &Salir
Font/size 10

c) Agregamos el siguiente código en los eventos correspondientes :

Public Class frmLaboratorio02


Dim Index As Integer 'indice del item seleccionado

Private Sub frmLaboratorio02_Load(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles MyBase.Load

'carga la lista de valores del combobox


cboTipo.Items.Add("Permanente")
cboTipo.Items.Add("Contratado")
cboTipo.Items.Add("Eventual")

'item por defecto


DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 38/48

cboTipo.SelectedIndex = 1

btNuevo.Enabled = False
End Sub

Private Sub btSalir_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles btSalir.Click

Me.Close()
End Sub

Private Sub txtNombre_TextChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles txtNombre.TextChanged

If Trim(txtNombre.Text) = "" Then


btNuevo.Enabled = False

Else
btNuevo.Enabled = True

End If
End Sub

Private Sub cboTipo_SelectedIndexChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles cboTipo.SelectedIndexChanged

'obtiene el índice del item seleccionado


'calcula el total

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

If Trim(txtHorasTrab.Text) = "" Then


txtHorasTrab.Focus()
Else
lblTotal.Text = Format(Val(lblPagoXHora.Text)
* Val(txtHorasTrab.Text), "###,##0.00")
End If
End Sub

Private Sub txtHorasTrab_TextChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles txtHorasTrab.TextChanged

If Trim(txtHorasTrab.Text) = "" Or Val(txtHorasTrab.Text) = 0 Then


btNuevo.Enabled = False
Else
btNuevo.Enabled = True
lblTotal.Text = Format(Val(lblPagoXHora.Text)
* Val(txtHorasTrab.Text), "###,##0.00")
End If
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 39/48

End Sub

Private Sub btNuevo_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles btNuevo.Click

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

2. Realizamos el siguiente diseño agregando los controles indicados en la tabla siguiente:


DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 40/48

Control Propiedad Valor


Form1 Name frmLaboratorio02
Text Laboratorio01-06VB
FormBorderStyle FixedSingle
AcceptButton btCalcular

Button1 Name btCalcular


Text &Calcular
Font/size 10

Button2 Name btOtra


Text &Otro Proforma
Font/size 10

Button3 Name btSalir


Text &Salir
Font/size 10

TextBox1 Name txtCliente


Font/size 10

TextBox2 Name txtDireccion


Font/size 10

Combobox1 Name cboComputadoras


Font/size 10

Combobox1 Name cboImpresoras


Font/size 10

Label1 Name lblPrecComp


DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 41/48

Font/size 10

Label2 Name lblPrecImp


Font/size 10

Label3 Name lblSubTotal


Font/size 10

Label4 Name lblIGV


Font/size 10

Label5 Name lblTotal


Font/size 10

3. Agregamos el siguiente código en los eventos correspondientes :

namespace Laboratorio02_06CS
{
public partial class frmLaboratorio02 : Form
{
//indice del item seleccionado
int index;

private void Borrar()


{
//limpia los controles del formulario
txtCliente.Text = "";
txtDireccion.Text = "";
lblPrecComp.Text = "";
lblPrecImp.Text = "";
lblSubTotal.Text = "";
lblIGV.Text = "";
lblTotal.Text = "";

//item seleccionado por defecto


cboComputadoras.SelectedIndex = 0;
cboImpresoras.SelectedIndex = 0;

//foco de atención sobre el control txtCliente


txtCliente.Focus();
}

public frmLaboratorio02()
{
InitializeComponent();
}

private void frmLaboratorio02_Load(object sender, EventArgs e)


{
//limpia la lista de computadoras e impresoras
cboComputadoras.Items.Clear();
cboImpresoras.Items.Clear();

//agregar elementos a los combobox


cboComputadoras.Items.Add("IBM");
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 42/48

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;

//mostrar fecha del sistema


lblFecha.Text = "Fecha " + DateTime.Now.ToString("dd/MM/yyyy");

Borrar();

private void btCalcular_Click(object sender, EventArgs e)


{
//calcula subtotal, igv y total

float ST, IGV, TT;


ST = Convert.ToInt32(lblPrecComp.Text) + Convert.ToInt32(lblPrecImp.Text);
IGV = ST * 19 / 100;
TT = ST + IGV;
lblSubTotal.Text = "Sub Total :" + ST.ToString("###,##0.00");
lblIGV.Text = "I.G.V. :" + IGV.ToString("###,##0.00");
lblTotal.Text = "Total :" + TT.ToString("###,##0.00");

private void btOtra_Click(object sender, EventArgs e)


{
Borrar();
}

private void btSalir_Click(object sender, EventArgs e)


{
this.Close();
}

private void cboComputadoras_SelectedIndexChanged(object sender, EventArgs e)


{
//muestra el precio de la computadora seleccionada
index = cboComputadoras.SelectedIndex;
switch(index)
{
case 0:
lblPrecComp.Text = "850";
break;
case 1:
lblPrecComp.Text = "700";
break;
case 2:
lblPrecComp.Text = "600";
break;
}
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 43/48

private void cboImpresoras_SelectedIndexChanged(object sender, EventArgs e)


{
//muestra el precio de la impresora seleccionada
index = cboImpresoras.SelectedIndex;
switch(index)
{
case 0:
lblPrecImp.Text = "180";
break;
case 1:
lblPrecImp.Text = "270";
break;
case 2:
lblPrecImp.Text = "380";
break;
}
}
}
}

Visual Basic

a) Creamos un nuevo proyecto en Visual Basic con el nombre de Laboratorio02-06VB

b) Realizamos el siguiente diseño agregando los controles indicados en la tabla siguiente:


DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 44/48

Control Propiedad Valor


Form1 Name frmLaboratorio02
Text Laboratorio01-06VB
FormBorderStyle FixedSingle
AcceptButton btCalcular

Button1 Name btCalcular


Text &Calcular
Font/size 10

Button2 Name btOtra


Text &Otro Proforma
Font/size 10

Button3 Name btSalir


Text &Salir
Font/size 10

TextBox1 Name txtCliente


Font/size 10

TextBox2 Name txtDireccion


Font/size 10

Combobox1 Name cboComputadoras


Font/size 10

Combobox1 Name cboImpresoras


Font/size 10
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 45/48

Label1 Name lblPrecComp


Font/size 10

Label2 Name lblPrecImp


Font/size 10

Label3 Name lblSubTotal


Font/size 10

Label4 Name lblIGV


Font/size 10

Label5 Name lblTotal


Font/size 10

c) Agregamos el siguiente código en los eventos correspondientes :

Public Class frmLaboratorio02


'indice del item seleccionado
Dim Index As Integer

Private Sub Borrar()


'limpia los controles del formulario
txtCliente.Text = ""
txtDireccion.Text = ""
lblPrecComp.Text = ""
lblPrecImp.Text = ""
lblSubTotal.Text = ""
lblIGV.Text = ""
lblTotal.Text = ""

'item seleccionado por defecto


cboComputadoras.SelectedIndex = 0
cboImpresoras.SelectedIndex = 0

'foco de atención sobre el control txtCliente


txtCliente.Focus()
End Sub
Private Sub btSalir_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btSalir.Click
Me.Close()
End Sub

Private Sub frmLaboratorio02_Load(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles MyBase.Load
'limpia la lista de computadoras e impresoras
cboComputadoras.Items.Clear()
cboImpresoras.Items.Clear()

'agregar elementos a los combobox


cboComputadoras.Items.Add("IBM")
cboComputadoras.Items.Add("Packer Bell")
cboComputadoras.Items.Add("Acer")
DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 46/48

cboImpresoras.Items.Add("Epson LX-300")
cboImpresoras.Items.Add("Deskject 400")
cboImpresoras.Items.Add("IBM graphics")
cboComputadoras.SelectedIndex = 0

cboImpresoras.SelectedIndex = 0

'mostrar fecha del sistema


lblFecha.Text = "Fecha " & Format(Now, "dd/MM/yyyy")

Borrar()
End Sub

Private Sub cboComputadoras_SelectedIndexChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles cboComputadoras.SelectedIndexChanged

'muestra el precio de la computadora seleccionada


Index = cboComputadoras.SelectedIndex
Select Case Index
Case 0
lblpreccomp.Text = "850.00"
Case 1
lblpreccomp.Text = "700.00"
Case 2
lblpreccomp.Text = "600.00"
End Select
End Sub

Private Sub cboImpresoras_SelectedIndexChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles cboImpresoras.SelectedIndexChanged

'muestra el precio de la impresora seleccionada


Index = cboImpresoras.SelectedIndex
Select Case Index
Case 0
lblPrecImp.Text = "180.00"
Case 1
lblPrecImp.Text = "270.00"
Case 2
lblPrecImp.Text = "380.00"
End Select
End Sub

Private Sub btCalcular_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles btCalcular.Click
'calcula subtotal, igv y total

Dim ST, IGV, TT As Single


ST = Val(lblPrecComp.Text) + Val(lblPrecImp.Text)
IGV = ST * 19 / 100
TT = ST + IGV
lblSubTotal.Text = "Sub Total :" & Format$(ST, "###,##0.00")
lblIGV.Text = "I.G.V. :" & Format$(IGV, "###,##0.00")
lblTotal.Text = "Total :" & Format$(TT, "###,##0.00")
End Sub

Private Sub btOtra_Click(ByVal sender As System.Object,


DESARROLLO DE APLICACIONES DE ESCRITORIO Página: 47/48

ByVal e As System.EventArgs) Handles btOtra.Click


Borrar()
End Sub
End Class

PROBLEMAS PROPUESTOS

 Realice los siguientes ejercicios:

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.

4. Encontrar el mayor valor de un conjunto de n números dados.

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

Firma del Docente

Vous aimerez peut-être aussi