Controles en Visual Basic .Net
Uso de CheckedListBox - TabControl
Opciones del control ListBox de .Net

Fecha: 11/Dic/2004 (10 de Diciembre de 2004)
Autor: Ing. Fernando Luque Sánchez   - Trujillo - Perú

Emails: [email protected][email protected] - [email protected]

 


El presente trabajo pretende colaborar con el conocimiento de Visual Basic .Net y de las opciones nuevas de los controles CheckedListBox (nuevo en Visual Basic .Net), TabControl, que es similar a los anteriores SSTaB y TabStrip de VisualBasic 6.0 y de las opciones de ListBox

Un poco de teoría

El Control CheckedListBox

El control CheckedListBox muestra una lista de elementos similar a un control ListBox, pero cada elemento tienen la apariencia de una casilla de verificación o control CheckBox. El control CheckedListBox puede enlazarse a datos por medio de la propiedad DataSource al igual que los controles ComboBox y ListBox, debe establecerse el nombre de una columna del origen de datos a la propiedad DisplayMember. El código suponiendo que el CheckedListBox se llama chklProductos de la Tabla dtProductos del DataSet dsDatos y la columna es NombreProducto es:

        chklProductos.DataSource = dsDatos.Tables("dtProductos")
        chklProductos.DisplayMember = "NombreProducto"

El control CheckedListBox al igual que el control ListBox tienen la colección Items a la que se le agrega elementos, puede ser individualmente o de manera grupal con un arreglo o matriz. Por ejemplo:

Para agregar un elemento al control chklPromovidos se escribe lo siguiente

                                chklPromovidos.Items.Add("María Fernanda")

Para agregar un arreglo a chklPromovidos se utiliza AddRange: (de manera similar en un ListBox y un ComboBox)

                                Dim aPromovidos(3) as String
                                aPromovidos(0) = "Fernando"
                                aPromovidos(1) = "Carolina"
                                aPromovidos(2) = "María Fernanda"
                                aPromovidos(3) = "Fernandito"

                                chklPromovidos.Items.AddRange(aPromovidos)

Para eliminar una opción se utiliza Remove cuando se usa el texto de la opción y RemoveAt cuando usamos el índice que lo identifica. Para eliminar todos usamos Clear.

Para eliminar a Carlos:               chklPromovidos.Items.Remove("Carlos")

Para eliminar al selecccionado:    chklPromovidos.Items.Remove(chklPromovidos.SelectedItem)

Para eliminar al tercero:            chklPromovidos.Items.RemoveAt(2)

Para eliminar a todos:                chklPromovidos.Clear()

Algunas propiedades

CheckedListBox y ListBox

Propiedad Descripción
CheckOnClick Indica si la casilla cambia de estado con un solo clic. Aconsejo establecerla a True. Solo la tiene el control CheckedListBox
DataSource Indica el Origen de Datos
DisplayMember Indica la columna del origen de datos que se mostrará
ValueMember Indica el valor que se utilizará en caso la propiedad DislpayMember no sea el dato a utilizar.
Items Colección de valores incluidos en el control

El Control TabControl

Este control TabControl  muestra una colección de fichas similares a las etiquetas de una ventana de opciones (Herramientas, Opciones ... aunque sea de Internet Explorer), cada ficha o Página puede contener otros controles y también imágenes.

Este control es similar al control SStab y el control TabStrip de Visual Basic 6.0, actúa como un contenedor.

Algunas propiedades

TabControl

Propiedad Descripción
TabPages Contiene las fichas a mostrar en el control.
HotTrack Las fichas cambian de apariencia cuando el cursor para sobre ellas
ImagesList Relaciona el control con un control ImageList para mostrar el cada ficha una imagen
Multiline Muestra las fichas en varias líneas cuando esta en True.
ContextMenu Especifica el menú contextual del control

Para mas información vease: Colección combinada de Visual Studio .Net

Ahora mis ejercicios

El Primero: PracOtros

El Primer Proyecto llamado PracOtros (ver empaquetado con el código) supone la creación de una Proforma, donde seleccionaremos primero una línea de Productos y se mostrarán sublíneas cada una definida en una array, después de seleccionar la sublínea se mostrarán los productos en un CheckedListBox, seleccionado el producto se lo puede incluir en la Proforma que se incluirá en una ListBox. Cada opción es utilizada en un Page de un control Tabcontrol.

Aquí parte del código:

'PROCEDIMIENTO PARA LLENAR LAS SUBLINEAS

    Private Sub LlenarSublineas(ByVal sender As System.Object, _

        ByVal e As System.EventArgs) Handles cbolinea.SelectedIndexChanged

        lstSublineas.Items.Clear()

 

        Select Case cbolinea.SelectedItem

            Case "Lacteos"         'SUBLINEAS DE Lacteos

                Dim SubLacteos() As String = _

                    {"Enlatados", "Instantáneos", "Derivados"}

                Sublineas = SubLacteos.Clone

            Case "Ferreteria" 'SUBLINEAS DE Ferreteria

                Dim SubFerreteria() As String = _

                    {"Herramientas", "Agregados", "Pegamentos"}

                Sublineas = SubFerreteria.Clone

            Case "Perfumería" 'SUBLINEAS DE Perfumería

                Dim SubPerfumes() As String = _

                    {"Nacionales", "Importados", "Alternativos"}

                Sublineas = SubPerfumes.Clone

            Case "Hogar" 'SUBLINEAS DE Hogar

                Dim Subhogar() As String = _

                    {"Decoración", "Sanitarios", "Cerámicas"}

                Sublineas = Subhogar.Clone

        End Select

        lstSublineas.Items.AddRange(Sublineas)

    End Sub

 

El segundo: PracListas

Este ejercicio complementa el uso del control ListBox, supone que debe escribir un nombre, luego seleccionar un programa donde matricular al alumno, de acuerdo al programa seleccionado que son: Computación e Informática, Secretariado o Contabilidad se generan cursos que se insertan en una lista, estos cursos deben seleccionarse, activar el  CheckBox para matricularlo y luego calcular el costo de la matrícula.

Aquí parte del código:

'PROCEDIMIENTO PARA LA SELECCION DE LOS CURSOS

    Private Sub Seleccion(ByVal sender As System.Object, _

        ByVal e As System.EventArgs) Handles cmdUnoSel.Click

 

        If sender Is cmdUnoSel Then   'Seleccion de un Curso

            If lstDispo.SelectedIndex = -1 Then

                MessageBox.Show("No hay curso seleccionado...", "Error...")

            Else

                lstSelec.Items.Add(lstDispo.SelectedItem)

                lstDispo.Items.Remove(lstDispo.SelectedItem)

            End If

        ElseIf sender Is cmdTodosSel Then 'Seleccion de todos los cursos

            Dim x As Integer

            For x = 0 To lstDispo.Items.Count - 1

                lstSelec.Items.Add(lstDispo.Items.Item(x))

            Next

            lstDispo.Items.Clear()

        ElseIf sender Is cmdUnoNoSel Then 'Eliminacion de un curso

            If lstSelec.SelectedIndex = -1 Then

                MessageBox.Show("Seleccione el curso a eliminar...", "Error...")

            Else

                lstDispo.Items.Add(lstSelec.SelectedItem)

                lstSelec.Items.Remove(lstSelec.SelectedItem)

            End If

        ElseIf sender Is cmdTodosNoSel Then  'Eliminación de todos

            Dim x As Integer

            For x = 0 To lstSelec.Items.Count - 1

                lstDispo.Items.Add(lstSelec.Items.Item(x))

            Next

            lstSelec.Items.Clear()

        End If

    End Sub

El Tercero: Practica02

Este ejercicio permite complementar el uso de los controles básicos de Windows Forms, asi como el uso del control PictureBox para agregar una imagen o una foto dentro del formulario.

Aquí parte del código:

Private Sub Procesar(ByVal sender As System.Object, _

            ByVal e As System.EventArgs) Handles cmdAgregar.Click

        'PROCEDIMIENTO PARA LOS BOTONES DE COMANDO

        ' LOS DELEGADOS SE HAN INSERTADO EN EL CONSTRUCTOR

        'con las siguientes dos lineas

        'AddHandler cmdNuevo.Click, AddressOf Procesar

        'AddHandler cmdSalir.Click, AddressOf Procesar

        Dim TEXTOMENSAJE As String

        If sender Is cmdSalir Then

            End

        ElseIf sender Is cmdNuevo Then

            txtnombre.Clear()

            txtdire.Clear()

            optsoltero.Checked = True

            optcasado.Checked = False

            optestable.Checked = False

            optcontrato.Checked = True

            optotro.Checked = False

            dtpFechaReg.Value = Now

            Dim x As Integer

            For x = 0 To chklAficiones.Items.Count - 1

                'COMPROBAR SI ESTA SELECCIONADO

                If chklAficiones.GetItemCheckState(x) = CheckState.Checked Then

                    'QUITAR LA SELECCION

                    chklAficiones.SetItemChecked(x, False)

                End If

            Next

            Me.chklAficiones.ClearSelected()

            Me.PictureBox1.Image = Nothing

            txtnombre.Focus()

        ElseIf sender Is cmdAgregar Then

            MessageBox.Show("Agregar el registro...", _

                "Registro Nuevo...", MessageBoxButtons.OK)

            'MOSTRAR EL MENSAJE UNICAMENTE...

            TEXTOMENSAJE = "Nombre:       " & txtnombre.Text & ControlChars.CrLf & _

                           "Dirección:    " & txtdire.Text & ControlChars.CrLf & _

                           "Estado Civil: " & IIf(optsoltero.Checked, "Soltero", "Casado") & _

                           ControlChars.CrLf & _

                           "Condición:    " & IIf(optestable.Checked, "Estable", _

                                IIf(optcontrato.Checked, "Contratado", "Otra")) & _

                                ControlChars.CrLf & _

                            "Fecha de Registro: " & Me.dtpFechaReg.Value & _

                                ControlChars.CrLf & ControlChars.CrLf & _

                                ControlChars.CrLf & _

                           "Aficiones :    " & ControlChars.CrLf

            Dim x As Integer   'Para explorar las opciones del CheckedListBox

            For x = 0 To chklAficiones.Items.Count - 1

                'COMPROBAR SI ESTA SELECCIONADO

                If chklAficiones.GetItemCheckState(x) = CheckState.Checked Then

                    'Agregar la Afición al TextoMensaje

                    TEXTOMENSAJE = TEXTOMENSAJE & ControlChars.CrLf _

                        & chklAficiones.Items(x)

                End If

            Next

            MessageBox.Show(TEXTOMENSAJE, "Datos del registro insertado", _

                MessageBoxButtons.OK)

        End If

    End Sub

El Cuarto: PracVariosForms01

Este ejercicio es mas completo, incluye cajas de texto, CheckedListBox, ListBox y el uso de mas de un formulario, insertando también un módulo haciendo uso de variables publicas que se usarán en mas de un formulario.

Supone un sistema de Evaluacion de Personal, donde al seleccionar un departamento aparece el personal de este, deberán seleccionarse un mínimo de 6 personas para los exámenes, los cuales deben ser como mínimo 02 y como máximo 04. En el control DateTimePicker utilizado se especifica como fechas límites los días del mes en curso.

Aquí parte del código:

'PROCEDIMIENTO PARA LA SELECCION DEL PERSONAL

    Private Sub Seleccion(ByVal sender As System.Object, _

        ByVal e As System.EventArgs) Handles cmdUnoSel.Click

        cmdMostrar.Enabled = False

        If sender Is cmdUnoSel Then   'Seleccion de un empleado

            If lstDispo.SelectedIndex <> -1 Then

                lstSelec.Items.Add(lstDispo.SelectedItem)

                lstDispo.Items.Remove(lstDispo.SelectedItem)

            End If

        ElseIf sender Is cmdTodosSel Then 'Seleccion de todos los empleados

            Dim x As Integer

            For x = 0 To lstDispo.Items.Count - 1

                lstSelec.Items.Add(lstDispo.Items.Item(x))

            Next

            lstDispo.Items.Clear()

        ElseIf sender Is cmdUnoNoSel Then 'Eliminacion de un empleado

            If lstSelec.SelectedIndex <> -1 Then

                lstDispo.Items.Add(lstSelec.SelectedItem)

                lstSelec.Items.Remove(lstSelec.SelectedItem)

            End If

        ElseIf sender Is cmdTodosNoSel Then  'Eliminación de todos

            Dim x As Integer

            For x = 0 To lstSelec.Items.Count - 1

                lstDispo.Items.Add(lstSelec.Items.Item(x))

            Next

            lstSelec.Items.Clear()

        End If

    End Sub

 


Notas:


ir al índice

Fichero con el código de ejemplo: FernandoLuque_Controles.zip - 47 KB