Vous êtes sur la page 1sur 15

Sistemas UNI. Instructor: V. Carlos, Segura P.

Microsoft Partner

LABORATORIO WINDOWS FORMS .NET – 6.

Derechos Reservados, solo para ser usados dentro de la


institución.
Derechos de Autor

El contenido de este laboratorio tiene todos los derechos reservados, por lo tanto no se
puede reproducir, transcribir, almacenar a un sistema de recuperación o de alteración,
asimismo la traducción a otro idioma de ninguna forma o por ningún medio mecánico,
manual, electrónico, magnético, óptico o de otro modo.

La persecución de una reproducción no autorizada tiene como


consecuencia la cárcel y/o multas.

UNIVERSIDAD NACIONAL DE INGENIERIA 1


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

6 WINDOWS FORMS

1 Cuadros de Dialogo, Trabajando con Archivos y Gráficos.


1.1 Cuadros de Dialogo.

SaveFileDialog.
El componente SaveFileDialog permite a los usuarios examinar el sistema de archivos y seleccionar
los archivos que deseen guardar. El cuadro de diálogo devuelve la ruta de acceso y el nombre del
archivo que seleccionó el usuario en el cuadro de diálogo. Sin embargo, debe escribir el código para
escribir realmente los archivos en el disco.

Para mostrar esta pantalla existen dos formas:

A nivel ejecución:

Y a nivel diseño:
Desde el cuadro de herramientas en Diálogos seleccionamos el control SaveFileDialog y lo soltamos en el
formulario, luego escribiríamos lo siguiente:

UNIVERSIDAD NACIONAL DE INGENIERIA 2


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

Se debe utilizar el método OpenFile del componente SaveFileDialog para guardar el archivo seleccionado con
la propiedad FileName. Este método le proporciona un objeto Stream en el que se puede escribir. El
siguiente ejemplo utiliza la enumeración para los tipos de resultados en DialogResult para obtener el
nombre del archivo y el método OpenFile para guardarlo.

OpenFileDialog.
El componente OpenFileDialog de formularios Windows Forms es un cuadro de diálogo
preconfigurado. Es el mismo cuadro de diálogo Abrir archivo que expone el sistema operativo de
Windows. Se hereda de la clase CommonDialog.

Para mostrar esta pantalla existen dos formas:

A nivel ejecución:

Y a nivel diseño:
Desde el cuadro de herramientas en Diálogos seleccionamos el control OpenFileDialog y lo soltamos en el
formulario, luego escribiríamos lo siguiente:

UNIVERSIDAD NACIONAL DE INGENIERIA 3


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

Utilice este componente dentro de la aplicación para Windows como una solución sencilla para seleccionar
archivos, en lugar de configurar un cuadro de diálogo propio. Al basarse en cuadros de diálogo estándar de
Windows, creará aplicaciones cuya funcionalidad básica resultará inmediatamente familiar para los usuarios.
Tenga en cuenta, no obstante, que cuando utilice el componente OpenFileDialog deberá escribir su propia
lógica de apertura de archivos.

1.2 Usando Streams para Trabajar con Archivos.

Los Stream´s son clases especializadas para el tratamiento de archivos, de los cuales maneja en dos
direcciones tanto para la escritura y lectura.

Si la transferencia de información se hace desde una fuente externa, se realiza lectura del
Stream.
Si se desea hacer transferencia hacia una fuente externa para su uso, se realizara escritura de
un Stream.

Se denomina fuente externa, por que no necesariamente se puede trabajar sobe un archivo de texto simple,
también podemos ampliar para el tratamiento de datos de una red utilizando protocolos para el envió o
repleción de un computador, lectura o escritura de fuentes de consola, envió de datos a impresión, trabajo
de información en memoria, entre otros.

Las Clases que nos proporciona el Net Framework:

Clase FileStream:
El Net Framework proporciona unas clases simples para el manejo de archivos tanto para la lectura
y escritura de archivos, ubicadas en el espacio de nombre System.IO.
El propósito principal de esta clase es el trabajo sobre datos de cualquier archivo de tipo binario,
pero además se puede utilizar para acceder a cualquier tipo de archivo, inclusive con contenido de texto.

Clases StreamReader y StreamWriter


Son clases mejoradas y automatizadas para el manejo de archivos por encima de la clase FileStream, las
cuales están diseñadas para la lectura y escritura de archivos.

Uso de la Clase StreamReader.

El uso de la clase StreamReader es muy simple para el trabajo de archivos, al ser uso de esta clase o
instanciarla solo hay que indicarle la ruta del archivo que queremos procesar.

Dim File As String = "MiArchivo.txt"


Dim sReader As New StreamReader(File)

Solo tenemos que tener en cuenta que existen diferentes formatos o codificaciones de caracteres que no se
encuentran en el tradicional formato ASCII, para esto se puede indicar que tipo de codificación se desea
usar para la lectura del archivo.

Las codificaciones con las que se encuentran son las siguientes: ASCII, Unicode, UTF7, UTF8,
BigEndianUnicode.

UNIVERSIDAD NACIONAL DE INGENIERIA 4


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

Al no indicarse la codificación, no será necesario recurrir a los tipos de codificaciones indicados, ya que por
default trabajara con codificación ASCII. Pero se podría presentar el siguiente error:

Si el texto a leer es : “Galería del gastrónomo”


Al realizar la lectura retornara : “Galera del gastrnomo”

Para evitar esto, lo que debemos hacer utilizar el mismo Encoding correspondiente a la página actual de
códigos ANSI del sistema.

Dim File As String = "MiArchivo.txt"


Dim sReader As New StreamReader(File, System.Text.Encoding.Default)

Al realizar la lectura retornara : “Galería del gastrónomo”

Ahora revisemos los métodos principales de esta clase:

ReadLine:
Realiza la lectura de toda una línea completa de un archivo de texto, hasta el cambio de línea mas
próximo o siguiente, este método omite el carácter de salto y retorno de línea.

linea = sReader.ReadLine()

ReadToEnd:
Al realizar este método, lo que hará será leer toda la información que te proporciona el archivo,
desde la última lectura realizada con ReadLine o Read hasta el final del archivo.

linea = sReader.ReadToEnd()

Read:
Si usamos este método solo será para leer carácter por carácter encontrado, incluido los espacios en
blanco, retorno de carro o salto de línea, y lo que devuelve será su equivalente en código ASCII,
este método al procesar y no encontrar nada devolverá como valor “-1”.

Por ejemplo si el texto tuviera el siguiente contenido:

Al procesar el siguiente código:

Dim reader As New StreamReader("Miejemplo.txt")


Dim c As String
Do
c = reader.Read
If c Is Nothing Or c = "-1" Then
Exit Do
End If
Me.ListBox1.Items.Add(c + " <=> " + Chr(c))
Loop

UNIVERSIDAD NACIONAL DE INGENIERIA 5


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

Se tendrá el siguiente resultado:

Close:
Al realizar la instancia se produce el levantar el archivo en memoria para uso exclusivo de lectura,
luego de realizar el proceso se debe de usar el método Close para liberar el archivo y su posible uso.

sReader.Close()

Uso de la Clase StreamWriter.

El uso de la clase StreamWriter al igual que la clase StreamReader funciona de la misma manera a la hora
de la instancia, pero el propósito de esta clase es solo para escritura de archivo u otro Stream. Al usar esta
clase se debe tener en cuenta lo siguiente:

Al escribir en un archivo, y si no se encuentra en la ruta física lo crea.


Al escribir en un archivo, y si este existe en la ruta física limpia el archivo y vuelve a escribir.
Al escribir en un archivo, y si este existe en la ruta física puede escribir al final del archivo,
indicándole el atributo “Append”.

Al usar la clase StreamWriter, se le indica el nombre del archivo:

Dim sWriter As New StreamWriter("Empleados.txt")

Para indicarle que queremos, que al escribir en un archivo lo haga al fina del la ultima linea, tenemos que
activar la forma Append.

Dim sWriter As New StreamWriter("Empleados.txt", True)

Para usar un determinado Encoding, se le indica como un tercer parámetro:

Dim sWriter As New StreamWriter("Empleados.txt", True, System.Text.Encoding.Default)

Al igual que con la clase anterior, al indicarse la codificación System.Text.Encoding.ASCII, se podría


presentar el siguiente error:

Si el texto a escribir es : “Galería del gastrónomo”


Al realizar la escritura se encontrara : “Galer?a del gastr?nomo”

Ahora revisemos los métodos principales de esta clase:

WriteLine:
Se utiliza para la escritura de líneas en un archivo de texto, es decir por cada invocación a este método se
escribirá una línea debajo de la otra.

Dim sWriter As New StreamWriter("Empleados.txt")


sWriter.WriteLine("Galería del gastrónomo")

UNIVERSIDAD NACIONAL DE INGENIERIA 6


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

Write:
Usado básicamente para escribir carácter por carácter en forma consecutiva en una sola línea.

Dim sWriter As New StreamWriter("Empleados.txt")


sWriter.Write("U")
sWriter.Write("N")
sWriter.Write("I")

Close
Así como en la clase anterior sirve para liberar el archivo trabajado de memoria.

Laboratorio 07

I.- Revisar el archivo que se entregara al alumno, el cual consiste de la tabla Customers, de las cuales la
estructura del archivo consta de lo siguientes campos con sus respectivas longitudes:

Columna Tipo Longitud


CustomerID nchar 10
CompanyName nvarchar 40
ContactName nvarchar 30
ContactTitle nvarchar 30
Address nvarchar 60
City nvarchar 15
PostalCode nvarchar 10
Country nvarchar 15
Phone nvarchar 24

Al realizar la lectura de este archivo debemos tener en cuenta lo siguiente, que por cada campo mostrado a
un espacio de separación, es decir si estamos leyendo la línea:

CustomerID CompanyName ContactName


---------- ---------------------------------------- ------------------------------
AROUT Around the Horn Thomas Hardy

La grafica nos mostraría como estaría ordenada, para hacer referencia a un campo especifico:
-- Longitud: 1 -- -- Longitud: 1 --

- Longitud: 10 - -- Longitud: 40 -- -- Longitud: 30 --

Y a nivel código si solo queremos leer el campo CompanyName, debemos hacer lo siguiente:

Dim sReader As New StreamReader(File, System.Text.Encoding.Default)


linea = sReader.ReadLine()
linea = linea.Substring(10+1, 40)

De igual forma para el campo Address, tendríamos que hacer la siguiente contabilización:

linea = linea.Substring(10+1+40+1+30+1+30+1, 40)

UNIVERSIDAD NACIONAL DE INGENIERIA 7


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

II.- Crearemos el siguiente formulario frmExportación, con el siguiente diseño:

III.- En el botón Procesar colocamos lo siguiente:

Dim File As String = "Clientes.rpt"


Dim sReader As New StreamReader(File, System.Text.Encoding.Default)
Dim linea As String

'Leemos la cabecera y las líneas punteadas


sReader.ReadLine() : sReader.ReadLine()

Dim sCompania, sDireccion As String

Do
linea = sReader.ReadLine()
If linea Is Nothing Then
Exit Do
End If
If linea <> "" Then
sCompania = linea.Substring(11, 40)
sDireccion = linea.Substring(114, 60)
Me.lstCompania.Items.Add(sCompania)
Me.lstDireccion.Items.Add(sDireccion)
End If

Loop
sReader.Close()

IV.- Para el botón Generar Archivo, se codificara lo siguiente:

Dim sWriter As New StreamWriter("ArchivoClientes.txt", False)


Dim slinea, sCompania, sDireccion As String

'Formateamos para mantener anchos iguales:


sCompania = "Compañias"
slinea = sCompania + Space(40 - sCompania.Length + 1)

sDireccion = "Dirección"
slinea += sDireccion + Space(60 - sDireccion.Length + 1)

sWriter.WriteLine(slinea)

UNIVERSIDAD NACIONAL DE INGENIERIA 8


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

slinea = New String("-", 40) + " " + New String("-", 60)


sWriter.WriteLine(slinea)

For i As Integer = 0 To Me.lstCompania.Items.Count - 1


sCompania = Me.lstCompania.Items.Item(i)
sDireccion = Me.lstDireccion.Items.Item(i)

slinea = sCompania + Space(40 - sCompania.Length + 1)


slinea += sDireccion + Space(60 - sDireccion.Length + 1)
sWriter.WriteLine(slinea)
Next
sWriter.Close()

'Mostramos el archivo generado.


Dim sReader As New StreamReader("ArchivoClientes.txt")
Me.txtClientes.Text = sReader.ReadToEnd
sReader.Close()

UNIVERSIDAD NACIONAL DE INGENIERIA 9


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

2 Trabajando con Graficas en .NET.


2.1 La Clase Graphics.

La clase Graphics proporciona métodos para dibujar objetos en la interfaz de la pantalla, se puede obtener
la clase Graphics llamando al método [Control].CreateGraphics en un objeto que herede de
System.Windows.Forms.Control, ejemplo:

Esta es la clase que realmente dibuja líneas, curvas, figuras, imágenes y texto, para esto necesita un lienzo
donde poder hacerlo, el cual se crea de la siguiente manera:

Dim g As Graphics = Me.CreateGraphics

Ubicación de las coordenadas:

X
(0,0)

(x1,y1)

(x2,y2)

Las clases y estructuras más importantes del namespace System.Drawing, las podemos resumir en:

Bitmap
Encapsula un Bitmap GDI+, usado para trabajar con imágenes, representa una forma de asignar un
grafico en un PictureBox.

Dim MiImagen As New Bitmap("Angelito.jpg")


Me.PictureBox1.Image = MiImagen

Font
A veces cuando queremos cambiar el tipo de fuente a nivel ejecución, hemos tenido problema en
definir como hacer esto, para esto se crea una clase que te identifique que fuente deseas cambiar.

Dim MiFuente As New Font("Verdana", 25, FontStyle.Bold)


Me.TextBox1.Font = MiFuente
Me.TextBox1.Text = "Nueva fuente"

Pen
Para dibujar líneas y curvas, arcos y otras figuras etc.

Dim Lapiz As New Pen(Color.Black)


With Lapiz
.Width = 7 'Para el ancho de la línea, de tipo single
.StartCap = Drawing2D.LineCap.Flat 'Estilo inicial de la línea

UNIVERSIDAD NACIONAL DE INGENIERIA 10


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

.EndCap = Drawing2D.LineCap.Flat 'Estilo final de la línea


End With

DrawLine
Dibuja una línea que conecta los dos puntos especificados por los pares de coordenadas.

Dim Lapiz As New Pen(Color.Aqua)


With Lapiz
.Width = 4
.StartCap = Drawing2D.LineCap.Flat
.EndCap = Drawing2D.LineCap.Flat
.DashStyle = Drawing2D.DashStyle.Dash
End With
Dim P1 As New Point(20, 40)
Dim P2 As New Point(80, 120)
'Dibujando la línea:
Me.CreateGraphics.DrawLine(Lapiz, P1, P2)

DrawRectangle
Dibuja un rectángulo especificado por un par de coordenadas, un valor de ancho y un valor de alto.

Dim Rtg As New Rectangle(250, 120, 100, 100)


Me.CreateGraphics.DrawRectangle(Lapiz, Rtg)

DrawEllipse
Dibuja una elipse definida por un rectángulo delimitador especificado por un par de coordenadas, un
valor de alto y un valor de ancho.

Dim Rtg As New Rectangle(250, 120, 100, 150)


Me.CreateGraphics.DrawEllipse(Lapiz, Rtg)

DrawPolygon
Dibuja un polígono definido por una matriz de estructuras Point.

Dim Punto(5) As Point


Punto(0) = New Point(40, 40) : Punto(1) = New Point(40, 120)
Punto(2) = New Point(80, 160) : Punto(3) = New Point(80, 80)
Punto(4) = New Point(160, 80) : Punto(5) = New Point(120, 40)
Me.CreateGraphics.DrawPolygon(Lapiz, Punto)

DrawCurve
Sobrecargado. Dibuja una curva cardinal a través de una matriz especificada de puntos de la clase
Point.

FillEllipse
Rellena el interior de una elipse definida por un rectángulo de delimitación especificado por un par
de coordenadas, un valor de alto y un valor de ancho.

Me.CreateGraphics.FillEllipse(Brushes.Blue, Rtg)

FillRectangle
Rellena el interior de un rectángulo especificado por un par de coordenadas, un valor de ancho y un
valor de alto.

FillPolygon
Rellena el interior de un polígono definido por una matriz de puntos, este método requiere indicarle
el color de relleno y el polígono transformado en una matriz de puntos.

TranslateTransform

UNIVERSIDAD NACIONAL DE INGENIERIA 11


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

Cambia el origen del sistema de coordenadas anteponiendo la traslación especificada a la matriz de


transformación de este Graphics.

Dim g As Graphics = Me.CreateGraphics


Dim Rtg As New Rectangle(250, 120, 80, 80)
g.DrawEllipse(Lapiz, Rtg)
g.TranslateTransform(0, 10)
g.DrawEllipse(Lapiz, Rtg)

Que al generar varios ciclos, podemos obtener la siguiente grafica:

ScaleTransform

Dim g As Graphics = Me.CreateGraphics


Dim Rtg As New Rectangle(50, 50, 70, 70)
g.DrawEllipse(Lapiz, Rtg)
g.ScaleTransform(1.1, 1)
g.DrawEllipse(Lapiz, Rtg)

Que al generar varios ciclos, podemos obtener la siguiente grafica:

RotateTransform

Dim g As Graphics = Me.CreateGraphics


Dim Rtg As New Rectangle(150, 150, 70, 70)
g.DrawEllipse(Lapiz, Rtg)
g.RotateTransform(-1)
g.DrawEllipse(Lapiz, Rtg)

Que al generar varios ciclos, podemos obtener la siguiente grafica:

UNIVERSIDAD NACIONAL DE INGENIERIA 12


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

2.2 Clase GraphicsPath

La clase GraphicsPath, del espacio de nombres System.Drawing.Drawing2D, tiene objetos que representan
figuras (líneas y curvas conectadas). Las aplicaciones usan estas secuencias de datos con líneas y curvas
(path) para dibujar los bordes de las figuras, rellenar el interior de las figuras y crear zonas de recorte. El
motor gráfico mantiene las coordenadas de las figuras geométricas en objetos path. Los objetos path
pueden estar formados a su vez por otras figuras.

Las aplicaciones usan trazados para dibujar los contornos de formas, rellenar el interior de formas y crear
áreas de recorte. El motor de gráficos mantiene las coordenadas de las formas geométricas de un trazado
en un espacio de coordenadas universales.

Un trazado puede estar formado por un número indeterminado de figuras (subtrazados). Cada figura está
formada por una secuencia de líneas y curvas conectadas o por una forma geométrica primitiva. El punto
inicial de una figura es el primer punto de la secuencia de líneas y curvas conectadas. El extremo es el
último punto de la secuencia. Los puntos iniciales y finales de una forma geométrica primitiva se definen
mediante la especificación primitiva.

Usando la clase GraphicsPath

UNIVERSIDAD NACIONAL DE INGENIERIA 13


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

Laboratorio 08:

I.- Para esto primero crearemos un formulario con el nombre frmEstadisticas, el cual debe tener el
siguiente diseño:

PictureBox

II.- Crear una matriz de ámbito global en el formulario:

Dim Agencias(1, 8) As String

III.- En el boton agregar, se debe agregar lo siguiente:

Dim sAgencia As String = Me.txtAgencia.Text


Dim Porc As String = Me.txtCantidad.Text

Dim i As Integer = Me.lstAgencias.Items.Count


If i < 9 Then
Me.lstAgencias.Items.Add(sAgencia + " " + Porc + "%")
Agencias(0, i) = sAgencia
Agencias(1, i) = Porc
Else
MessageBox.Show("Solo hasta 9 agencias", _
"Estadistica de Ventas", _
MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End If

IV.- Dentro del formulario crear el siguiente método DibujarBarra:

Sub DibujarBarra(ByVal Num As Integer, _


ByVal Altura As Integer, _
ByVal Titulo As String)

Dim g As Graphics = Me.PictureBox1.CreateGraphics


Dim NumBarra As Integer = 40 + 65 * Num
Dim H As Integer = Altura
'Dibujamos la línea base:
Dim p1 As New Point(20, 280)
Dim p2 As New Point(NumBarra + 85, 280)
Dim LinX As New Pen(Color.DarkCyan)
LinX.Width = 2

UNIVERSIDAD NACIONAL DE INGENIERIA 14


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.
Microsoft Partner

Dim Barra As New Rectangle(NumBarra, 280 - H, 55, H)


g.FillRectangle(Brushes.MediumTurquoise, Barra)
g.DrawRectangle(LinX, Barra)
'Dibujando los titulos:
Dim miFuente As New Font("Verdana", 7, FontStyle.Underline)
Me.PictureBox1.CreateGraphics.DrawString(Titulo, _
miFuente, Brushes.ForestGreen, NumBarra, 290)

LinX.Width = 4
LinX.EndCap = Drawing2D.LineCap.Triangle

g.DrawLine(LinX, p1, p2)


End Sub

V.- Por ultimo en el botón graficar colocamos:

For i As Integer = 0 To Agencias.GetUpperBound(1)


Dim Porc As Integer = CInt(Agencias(1, i))
Dim Nombre As String = Agencias(0, i)
DibujarBarra(i, Porc, Nombre)
Next

VI.- Al ejecutar el siguiente ejemplo se debe observar lo siguiente:

UNIVERSIDAD NACIONAL DE INGENIERIA 15


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS

Vous aimerez peut-être aussi