You are on page 1of 44
Como en el caso anterior, para conocer en la practica algunas de las posibi- lidades de los lapices vamos a servirnos de un ejemplo. Comenzaremos inser- tando en un formulario los elementos que pueden observarse en la figura 13.10: dos etiquetas de texto y dos controles ComboBox. Estos nos serviran como lis- tas desplegables en las que mostraremos todos los tipos de trazo y terminadores disponibles, facilitando la seleccion de cualquiera de ellos Lo primero que tenemos que hacer, cuando se abra esta ventana, sera recu perar todos los elementos de las enumeraciones DashStyle y LineCap para anadirlos a las listas desplegables. Las enumeraciones son objetos derivados de la clase System. Enum, una clase en la que se implementan diversos méto dos que, por lo tanto, heredan todas las enumeraciones. Uno de esos métodos es Get Values(), mediante el cual es posible obtener un arreglo con todos los valores que contiene la enumeracién. Este arreglo se devuelve en forma de ob jeto de la clase Array, que es la base de todos los arreglos Una vez que ya tenemos el arreglo con los valores, recorrerlo no es ningtin problema. Podemos, por ejemplo, usar la instruccion For Each y recuperarlos individualmente. Lo que tenemos, sin embargo, son valores, datos que pode- mos usar, Ilegado el caso, para efectuar asignaciones a las propiedades Dash- Line, StartCap oEndCap. Lo que necesitamos afadir a las listas desplegables, sin embargo, es una cadena de texto, no el valor de una enumeracién. En cual- quier momento, independientemente del tipo de valor sobre e] que estemos tra- bajando, podemos recuperar una representacion textual mediante el metodo cticamente todos los objetos. ToString() del que dispenen pr “ene Eden ver Brace Generar Repurer agi Ewnoio Heramerias venins Ayusa ME epcones Br AS SSR BB) yp vd >| uip #9 roars: © OD GIA AE menepmsviccmsmsoinsaoniee Sle # He) AY rth Mile ies 1x\9} [mamas senvrcontonaron =] @ aI) : cncobitton al? fcumsraten Ton rte (rpc) fanvoeor Tue cr tein Oring fates ce rent cot Si Sat 8 ri (i oa ij Figura 13.10. Aspecto del formulario a disenar abiendo esto, comenzaremos afadiendo a la clase del formulario los cua- Los dos primeros, de tipo Array, alojaran la lista de tro miembros siguientes valores de las citadas enumeraciones, mientras que Terminador y Trazo mantendran el valor elegido en cada momento. Private Terminadores As Array Private Trazos As Array Private Terminador As LineCap Private Trazo As DashStyle Los cuatro miembros son privados, de tal manera que sélo podran utilizar- se desde la clase en que han sido declarados, es decir, desde el interior de los métodos de este formulario. Acto seguide hacemos doble clic sobre el formulario, o bien seleccionamos el evento Load usando las listas que hay en la parte superior del editor de co- digo, e introducimos las sentencias mostradas a continuacion. Private Sub frmLapices Load( ByVal sender As System.Object, _ ByVal © As System.EventArgs) Handles MyBase.Load Terminadores = System, Enum.GetValues (GetType(I.ineCap) ) Trazos = System. Enum, GetValues (Get Type (DashStyle) ) For Each Terminador In ‘erminadores cbTerminadores. [tems .Add(Terminador .ToString()) Next For Fach Trazo In Trazos cbTrazo. Items. Add(Trazo.ToString()) Next cbTerminadores.SelectedIndex ~ 0 cbTrazo.SelectedIndex = 0 End Sub Utilizamos el método GetValues() de la clase Enum dos veces, una para recuperar la lista de valores de la enumeracion LineCap y otra para los de la enumeracién DashStyle. Observe que lo que necesita dicho método como parametro es un tipo de dato, no el identificador de la enumeracién en si. Por ello usamos la funcion GetType() para recuperarlo. Después, en sendos bucles, anadimos a las listas desplegables los nombres de cada uno de los valores de las enumeraciones. Terminamos seleccionando el primer elemento de cada una de las listas, utilizando para ello la propiedad SelectedIndex. El tipo de trazo y terminador, almacenados en las variables Trazo y Ter- minador respectivamente, los usaremos en un método del formulario, asocia- do al evento Paint, para dibujar dos lineas en la ventana. Una de ellas, recta, estard basada en una brocha con un patron de relleno, mientras que la otra uti- lizara un degradado de color. El codigo de ese método es el siguiente: Private Sub frmlapices_Paint( ByVal sender As Object, _ ByVal e As System.Windows.Forms.PaintEventargs) Handles MyBase.Paint Dim BrochaPatron As HatchBrush = New HatchBrush(HatchStyle.Sphere, Color.Olive) Dim Lapiz As Pen = New Pen(BrochaPatron, 8} Dim Rectangulo AS Rectangle = New Rectangle(250, 150, 100, 150) Dim BrochaFundido As LinearGradientBrush - New LinearGradientBrush(Rectangulo, ~ Color.¥vellow, Color.Red, _ LinearGradientMode.BackwardDiagonal ) Lapiz.DashStyle = Trazo Lapiz.StartCap = Terminador Lapiz.EndCap = Terminador e.Graphics.DrawLine(Lapiz, 50, 150, 200, 250) Lapiz.Brush = BrochaFundido e.Graphics.DrawArc(Lapiz, 250, 150, 100, 150, -90, 180) End Sub Si ejecuta cl programa efectivamente vera, como en la figura 13.11, la linea recta y el arco con los atributos que hemos establecido en el método anterior. Al seleccionar uno de los elementos de las listas que hay en la parte superior, sin embargo, no vemos cambio alguno, no se modifica ni el tipo de trazo ni los ele- mentos que deberian aparecer en los extremos. Lo que ocurre es légico puesto que no hemos asociado codigo alguno al evento que generan las listas desplegables cuando se cambia la seleceién ac- tual, concretamente el evento Selected IndexChanged. Seleccione en la lista de la izquierda uno de los controles ComboBox y en la de la derecha el mencio- nado evento, repitiendo la operacién con el otro ComboBox. Los dos métodos deberian quedar asi:

You might also like