el Guille, la Web del Visual Basic, C#, .NET y más...
Ir al índice de Visual Studio 2008 y .NET Framework 3.5 Utilidades .NET Framework 3.5

gsBuscarTexto

OpcionesBuscar.xaml.vb

Código de Visual Basic para el control de usuario WPF OpcionesBuscar

 
Publicado el 09/Dic/2007
Actualizado el 09/Dic/2007
Autor: Guillermo 'guille' Som

gsBuscarTexto.OpcionesBuscar.xaml.vb: Este es el código de Visual Basic asociado al control de usuario WPF usado en la utilidad gsBuscarTexto.



 

Introducción:

Este es el código de Visual Basic asociado al control de usuario WPF usado en la utilidad gsBuscarTexto.

 

'------------------------------------------------------------------------------
' OpcionesBuscar                                                    (07/Dic/07)
' Control de usuario WPF para las opciones de búsqueda
'
' ©Guillermo 'guille' Som, 2007
'------------------------------------------------------------------------------
Option Strict On
Option Infer Off

Imports Microsoft.VisualBasic
Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Collections.Generic

Partial Public Class OpcionesBuscar

    ''' <summary>
    ''' Delegado para el evento que avisa cuando los expanders se han abierto o cerrado
    ''' </summary>
    ''' <remarks>
    ''' En Visual Basic no hace falta definirlo, pero...
    ''' </remarks>
    Public Delegate Sub ExpanderExpandChangedEventHandler()

    ''' <summary>
    ''' Evento para indicar que se ha expandido o contraido los expanders
    ''' </summary>
    ''' <remarks></remarks>
    Public Event ExpanderExpandedChanged As ExpanderExpandChangedEventHandler

    Private m_EnEjecucion As Boolean = False

    ''' <summary>
    ''' Para asignar manualmente los manejadores de eventos
    ''' ya que me daba error en el diseñador de formularios
    ''' porque el objeto no estaba creado (al producirse los eventos del control)
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property EnEjecucion() As Boolean
        Get
            Return m_EnEjecucion
        End Get
        Set(ByVal value As Boolean)
            m_EnEjecucion = value
            If m_EnEjecucion Then
                AddHandler chkBuscar.Checked, AddressOf chkBuscar_Checked
                AddHandler chkBuscar.Unchecked, AddressOf chkBuscar_Checked
                AddHandler chkPoner.Checked, AddressOf chkPoner_Checked
                AddHandler chkPoner.Unchecked, AddressOf chkPoner_Checked
                AddHandler chkFecha.Checked, AddressOf chkFecha_Checked
                AddHandler chkFecha.Unchecked, AddressOf chkFecha_Checked

                chkPoner_Checked(Nothing, Nothing)
                chkBuscar_Checked(Nothing, Nothing)
                chkFecha_Checked(Nothing, Nothing)
            Else
                RemoveHandler chkBuscar.Checked, AddressOf chkBuscar_Checked
                RemoveHandler chkBuscar.Unchecked, AddressOf chkBuscar_Checked
                RemoveHandler chkPoner.Checked, AddressOf chkPoner_Checked
                RemoveHandler chkPoner.Unchecked, AddressOf chkPoner_Checked
                RemoveHandler chkFecha.Checked, AddressOf chkFecha_Checked
                RemoveHandler chkFecha.Unchecked, AddressOf chkFecha_Checked
            End If
        End Set
    End Property


    ''' <summary>
    ''' Devuelve el contenido del combo indicado como una cadena (string)
    ''' con cada elemento del combo separado por la barra vertical
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks>
    ''' Esta función se usa internamente en este control
    ''' para devolver los contenidos de los diferentes controles
    ''' </remarks>
    Private Function cbo2String(ByVal cbo As ComboBox) As String
        Dim lista As New List(Of String)
        For Each s As String In cbo.Items
            lista.Add(s)
        Next
        Return String.Join("|", lista.ToArray())
    End Function

    ''' <summary>
    ''' Asigna la cadena con los elementos a asignar al combo indicado.
    ''' Cada elemento estará separado por una barra vertical
    ''' </summary>
    ''' <param name="datos">
    ''' La cadena con los elementos sepados por una barra vertical
    ''' </param>
    ''' <param name="cbo">
    ''' El comboBox al que se asignarán esos elementos
    ''' </param>
    ''' <remarks>
    ''' Este método se usa internamente en este control
    ''' para asignar una cadena a cada uno de los combos usados
    ''' </remarks>
    Private Sub string2Cbo(ByVal datos As String, ByVal cbo As ComboBox)
        Dim ar() As String = datos.Split("|".ToCharArray, _
                                         StringSplitOptions.RemoveEmptyEntries)
        cbo.Items.Clear()
        For Each s As String In ar
            cbo.Items.Add(s)
        Next
    End Sub

    ''' <summary>
    ''' Devuelve el contenido del combo cboDir
    ''' </summary>
    ''' <returns>
    ''' Un string en el que cada elemento está separado por una barra vertical
    ''' </returns>
    ''' <remarks></remarks>
    Public Property Directorios() As String
        Get
            Return cbo2String(cboDir)
        End Get
        Set(ByVal value As String)
            string2Cbo(value, cboDir)
        End Set
    End Property


    ''' <summary>
    ''' Devuelve el contenido del combo cboFiltro
    ''' </summary>
    ''' <value></value>
    ''' <returns>
    ''' Un string en el que cada elemento está separado por una barra vertical
    ''' </returns>
    ''' <remarks></remarks>
    Public Property Filtros() As String
        Get
            Return cbo2String(cboFiltro)
        End Get
        Set(ByVal value As String)
            string2Cbo(value, cboFiltro)
        End Set
    End Property


    ''' <summary>
    ''' Devuelve el contenido del combo cboBuscar1
    ''' </summary>
    ''' <returns>
    ''' Un string en el que cada elemento está separado por una barra vertical
    ''' </returns>
    ''' <remarks></remarks>
    Public Property Buscar1() As String
        Get
            Return cbo2String(cboBuscar1)
        End Get
        Set(ByVal value As String)
            string2Cbo(value, cboBuscar1)
        End Set
    End Property

    ''' <summary>
    ''' Devuelve el contenido del combo cboBuscar2
    ''' </summary>
    ''' <returns>
    ''' Un string en el que cada elemento está separado por una barra vertical
    ''' </returns>
    ''' <remarks></remarks>
    Public Property Buscar2() As String
        Get
            Return cbo2String(cboBuscar2)
        End Get
        Set(ByVal value As String)
            string2Cbo(value, cboBuscar2)
        End Set
    End Property

    ''' <summary>
    ''' Devuelve el contenido del combo cboPoner1
    ''' </summary>
    ''' <returns>
    ''' Un string en el que cada elemento está separado por una barra vertical
    ''' </returns>
    ''' <remarks></remarks>
    Public Property Poner1() As String
        Get
            Return cbo2String(cboPoner1)
        End Get
        Set(ByVal value As String)
            string2Cbo(value, cboPoner1)
        End Set
    End Property

    ''' <summary>
    ''' Devuelve el contenido del combo cboPoner2
    ''' </summary>
    ''' <returns>
    ''' Un string en el que cada elemento está separado por una barra vertical
    ''' </returns>
    ''' <remarks></remarks>
    Public Property Poner2() As String
        Get
            Return cbo2String(cboPoner2)
        End Get
        Set(ByVal value As String)
            string2Cbo(value, cboPoner2)
        End Set
    End Property

    ''' <summary>
    ''' Actualizar el contenido de los combos
    ''' de forma que si el texto no está en los elementos (Items)
    ''' se añada a la lista
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub ActualizarCombos()
        With cboDir
            If .Items.Contains(.Text) = False Then
                .Items.Add(.Text)
            End If
        End With

        With cboFiltro
            If .Items.Contains(.Text) = False Then
                .Items.Add(.Text)
            End If
        End With

        With cboBuscar1
            If .Items.Contains(.Text) = False Then
                .Items.Add(.Text)
            End If
        End With

        With cboBuscar2
            If .Items.Contains(.Text) = False Then
                .Items.Add(.Text)
            End If
        End With

        With cboPoner1
            If .Items.Contains(.Text) = False Then
                .Items.Add(.Text)
            End If
        End With

        With cboPoner2
            If .Items.Contains(.Text) = False Then
                .Items.Add(.Text)
            End If
        End With

    End Sub

    ''' <summary>
    ''' Para llamar al evento Click del botón desde fuera de la clase
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub btnExaminarClick()
        btnExaminarDir_Click(Nothing, Nothing)
    End Sub

    ''' <summary>
    ''' Seleccionar el directorio en el que se hará la búsqueda inicial
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnExaminarDir_Click(ByVal sender As Object, _
                                     ByVal e As System.Windows.RoutedEventArgs) _
                                     Handles btnExaminarDir.Click

        Dim oFD As New System.Windows.Forms.FolderBrowserDialog
        With oFD
            .Description = "Seleccionar el directorio de búsqueda"
            .RootFolder = Environment.SpecialFolder.MyComputer
            ' Si el texto tiene varios directorios,
            ' usar solo el primero
            If Me.cboDir.Text.Contains(";") Then
                Dim i As Integer = Me.cboDir.Text.IndexOf(";")
                .SelectedPath = Me.cboDir.Text.Substring(0, i)
            Else
                .SelectedPath = Me.cboDir.Text
            End If
            If .ShowDialog = System.Windows.Forms.DialogResult.OK Then
                ' Si ya había un texto en el combo, agregarlo al final
                If String.IsNullOrEmpty(Me.cboDir.Text) = False Then
                    Me.cboDir.Text &= "; " & .SelectedPath
                Else
                    Me.cboDir.Text = .SelectedPath
                End If
            End If
        End With

    End Sub

    ''' <summary>
    ''' Cuando la operación de Drag &amp; Drop entra
    ''' en expanderFicheros o en cboDir
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub cboDir_DragEnter(ByVal sender As Object, _
                                 ByVal e As System.Windows.DragEventArgs) _
                                 Handles cboDir.DragEnter, expanderFichero.DragEnter
        ' Si hay datos de arrastrar y soltar, permitirlo
        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            e.Effects = DragDropEffects.Copy
        End If
    End Sub

    ''' <summary>
    ''' Cuando se suelta el fichero
    ''' en expanderFicheros o en cboDir
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub cboDir_Drop(ByVal sender As Object, _
                            ByVal e As System.Windows.DragEventArgs) _
                            Handles cboDir.Drop, expanderFichero.Drop
        ' Si hay datos de arrastrar y soltar, asignarlo al combo del directorio
        ' (al arrastrar, no se tiene en cuenta si ya había algo en el texto)
        If e.Data.GetDataPresent("FileDrop") Then
            Me.cboDir.Text = CType(e.Data.GetData("FileDrop", True), String())(0)
        End If

    End Sub

    ''' <summary>
    ''' Cuando se produce el evento Checked o Unchecked del chkPoner,
    ''' habilitar adecuadamente los combos del texto a poner 
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub chkPoner_Checked(ByVal sender As Object, _
                                 ByVal e As System.Windows.RoutedEventArgs) _
                                 'Handles chkPoner.Checked, chkPoner.Unchecked
        If m_EnEjecucion = False Then Exit Sub

        Dim b As Boolean = chkPoner.IsChecked.Value
        cboPoner1.IsEnabled = b
        cboPoner2.IsEnabled = b
    End Sub

    ''' <summary>
    ''' Cuando se produce el evento Checked o Unchecked del chkBuscar,
    ''' habilitar adecuadamente los combos del texto a buscar,
    ''' también se asigna el texto del expander para indicar si se busca texto o no
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub chkBuscar_Checked(ByVal sender As Object, _
                                  ByVal e As System.Windows.RoutedEventArgs) _
                                  'Handles chkBuscar.Checked, chkBuscar.Unchecked
        If m_EnEjecucion = False Then Exit Sub

        Dim b As Boolean = chkBuscar.IsChecked.Value
        cboBuscar1.IsEnabled = b
        cboBuscar2.IsEnabled = b
        cboTipoBuca.IsEnabled = b

        chkPoner.IsEnabled = b
        cboPoner1.IsEnabled = b
        cboPoner2.IsEnabled = b
        If chkPoner.Tag IsNot Nothing AndAlso CBool(chkPoner.Tag) = False Then
            chkPoner.IsChecked = False
            chkPoner.IsEnabled = False
            cboPoner1.IsEnabled = False
            cboPoner2.IsEnabled = False
        End If

        If b Then
            chkPoner_Checked(Nothing, Nothing)
            expanderBuscar.Header = "Texto a buscar"
        Else
            expanderBuscar.Header = "Texto a buscar (sin buscar texto)"
        End If
    End Sub

    ''' <summary>
    ''' Cuando se produce el evento Checked o Unchecked del chkFecha,
    ''' habilitar adecuadamente el texto de la fecha a usar en la búsqueda,
    ''' si no hay fecha, se pone el cursor en el control de la fecha
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub chkFecha_Checked(ByVal sender As Object, _
                                 ByVal e As System.Windows.RoutedEventArgs) _
                                 'Handles chkFecha.Checked, chkFecha.Unchecked
        If m_EnEjecucion = False Then Exit Sub

        Me.txtFecha.IsEnabled = chkFecha.IsChecked.Value

        ' Si se indica usar la fecha y está en blanco
        ' asignar la fecha actual y posicionar el cursor en la caja de textos
        If txtFecha.IsEnabled AndAlso String.IsNullOrEmpty(txtFecha.Text) Then
            txtFecha.Text = DateTime.Now.ToShortDateString
            txtFecha.SelectAll()
            txtFecha.Focus()
        End If
    End Sub

    ' Cuando se expanden los expanders, hacer visibles los grid
    ' Cuando se contraen los expanders, contraer los grids
    ' con idea de que se asignen los tamaños
    ' ya que el control sigue midiendo lo mismo, pero así puedo saber el espacio que ocupa.
    '
    ' Lo que se hace en cada caso es
    ' asignar a la propiedad Visibility del Grid correspondiente el valor adecuado
    ' para ocultarlo (contraer) o mostrarlo.
    ' Si se contraen (evento Collapsed)
    '   contraer el grid asignando a la propiedad Visibility el valor Visibilty.Collapsed.
    ' Si se expanden (evento Expanded)
    '   mostrar el grid asignando a la propiedad Visibility el valor Visibility.Visible.

    Private Sub expanderBuscar_Collapsed(ByVal sender As Object, _
                                         ByVal e As System.Windows.RoutedEventArgs) _
                                         Handles expanderBuscar.Collapsed
        If m_EnEjecucion = False Then Exit Sub

        Me.gridTexto.Visibility = System.Windows.Visibility.Collapsed
        RaiseEvent ExpanderExpandedChanged()
    End Sub

    Private Sub expanderBuscar_Expanded(ByVal sender As Object, _
                                        ByVal e As System.Windows.RoutedEventArgs) _
                                        Handles expanderBuscar.Expanded
        If m_EnEjecucion = False Then Exit Sub

        Me.gridTexto.Visibility = System.Windows.Visibility.Visible
        RaiseEvent ExpanderExpandedChanged()
    End Sub

    Private Sub expanderFichero_Collapsed(ByVal sender As Object, _
                                          ByVal e As System.Windows.RoutedEventArgs) _
                                          Handles expanderFichero.Collapsed
        If m_EnEjecucion = False Then Exit Sub

        Me.gridFichero.Visibility = System.Windows.Visibility.Collapsed
        RaiseEvent ExpanderExpandedChanged()
    End Sub

    Private Sub expanderFichero_Expanded(ByVal sender As Object, _
                                         ByVal e As System.Windows.RoutedEventArgs) _
                                         Handles expanderFichero.Expanded
        If m_EnEjecucion = False Then Exit Sub

        Me.gridFichero.Visibility = System.Windows.Visibility.Visible
        RaiseEvent ExpanderExpandedChanged()
    End Sub
End Class

 



 


La fecha/hora en el servidor es: 23/11/2024 3:55:39

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024