' /**
' ---------------------------------------------
' [- (A) Contenido -]
' ---------------------------------------------
' [- Versión -] = 23.10.17.1425.
' [- Nombre Clase -] = TextBoxBorrarElContenidoCommand.
' -------------
' [- Descripción -] = Clase que borra el contenido de un TextBox pasado por parámetro.
' -------------
' [- Observaciones -] = El parámetro que espera esta command es una referencia a un control wpf TextBox.
' -------------
' [- Bibliografía -] =
' https://msdn.microsoft.com/es-es/library/system.windows.input.applicationcommands(v=vs.110).aspx.
' https://msdn.microsoft.com/es-es/library/system.windows.input.componentcommands(v=vs.110).aspx.
' https://msdn.microsoft.com/es-es/library/system.windows.input.navigationcommands(v=vs.110).aspx.
' -------------
' [- CodigoEjemplo -] =
' Forma de uso
' ----
' Código en el código XMAL de la ventana
' ----
' 1) Hay que declarar en {Resources} el comando que se va a usar {TextBoxBorrarElContenidoCommand}
' También hay que darle un nombre que sera el que referencia en todo el código xaml,
' en este ejemplo es el indicado por {x:Key} es decir {TextBoxBorrarElContenidoCommando}
'
'
'
' ----
' 2) Código en el TextBox
' - Aquí solo me interesa saber el nombre del TextBox que es lo único que voy a usar.
' El resto de propiedades no afectan para nada
'
' 4) Forma alternativa para un contexMenu
' no consigo que funcione el binding y tengo que usar clic.
' Código en el item del context Menu que borra el TextBox
'
' ----
' Código en el evento clic
' Observa que llamo a la clase comando, pero se usa como una clase normal,
' a la que se le pasa por parámetro el TextBox que vamos a borrar
' La llamo porque tiene el código que necesito usar
' Private Sub MenuContextualBorrar_Click(sender As Object, e As RoutedEventArgs)
' Using objCommand As New TextBoxBorrarElContenidoCommand
' objCommand.Execute(Me.textBoxEntraDirectorio)
' End Using
' End Sub.
' ---------------------------------------------
' [- (B) Información básica -]
' ---------------------------------------------
' [- Module Name -] = TextBoxBorrarElContenidoCommand.vb.
' [- Propietario -] = AGUILA\Cuenta de Trabajo.
' [- Type -] = vb/file.
' [- Size -] = 12,19 KB - [12482 Bytes].
' [- Lenguaje -] = spa [es-ES] Español (España).
' -------------
' [- Fecha de creación -] = 2016/01/22.
' [- Última modificación -] = 2023/10/17 T1 4:23:42Z
' -------------
' [- Net Framework Release -] = Release: 4.6.1 o posterior.
' [- Net Framework Version -] = Versión: 4.0.30319.42000.
' [- Generador nombre -] = H_DocumentadorClases2022.
' [- Generador Version -] = Versión: 1.2.3.4.
' ---------------------------------------------
' [- (C) Propiedad intelectual -]
' ---------------------------------------------
' [- Autor Nombre -] = Joaquin Medina Serrano.
' [- Autor CorreoE -] = mailto:gmjms32@gmail.com
' [- Autor Copyright -] =
' Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivar 4.0 Internacional.
' Se puede consultar una copia de la licencia http://creativecommons.org/licenses/by-nc-nd/4.0/.
' ---------------------------------------------
' [- (D) Revisiones -]
' ---------------------------------------------
' [- Historial de revisiones -] =
' - 2016/01/22 - Creación
' - 2016/01/22 - actualiza la versión
' - 2023/10/17 - Actualización del código y de la documentación.
' ---------------------------------------------
' [- /Eof -]
' */
Option Explicit On
Option Strict On
Option Infer Off
Option Compare Binary
'
' -------------------------------------------------
Namespace Util.Command
'''
''' Clase que borra el contenido de un TextBox pasado por parámetro
'''
'''
'''
''' El parámetro que espera esta command es una referencia a un control wpf TextBox.
'''
'''
''' https://msdn.microsoft.com/es-es/library/system.windows.input.applicationcommands(v=vs.110).aspx.
''' https://msdn.microsoft.com/es-es/library/system.windows.input.componentcommands(v=vs.110).aspx.
''' https://msdn.microsoft.com/es-es/library/system.windows.input.navigationcommands(v=vs.110).aspx.
'''
'''
''' Un Ejemplo con la forma de uso de la clase
'''
'''
'''
'''
''' ----
''' 2) Código en el TextBox
''' - Aquí solo me interesa saber el nombre del TextBox que es lo único que voy a usar.
''' El resto de propiedades no afectan para nada
'''
''' ----
''' 4) Forma alternativa para un contexMenu
''' no consigo que funcione el binding y tengo que usar clic.
''' Código en el item del context Menu que borra el TextBox
'''
'''
''' Código en el evento clic
''' Observa que llamo a la clase comando, pero se usa como una clase normal,
''' a la que se le pasa por parámetro el TextBox que vamos a borrar
''' La llamo porque tiene el código que necesito usar
''' Private Sub MenuContextualBorrar_Click(sender As Object, e As RoutedEventArgs)
''' Using objCommand As New TextBoxBorrarElContenidoCommand
''' objCommand.Execute(Me.textBoxEntraDirectorio)
''' End Using
''' End Sub
''' ]]>
'''
'''
'''
''' dcterms.ISO8601
''' 2023-10-17T14:07:22
'''
'''
Public Class TextBoxBorrarElContenidoCommand
Inherits DelegateCommand
Implements IDisposable
Public Sub New()
MyBase.New()
'-------------------------------
' Los parámetros de [Command]
' El [Delegado] (la Acción) que llamara al método [cmdExecute]
Dim localExcuteAction As New Action(Of Object)(AddressOf Me.CmdExecute)
' El [Delegado] que llamara al método [cmdCanExecute]
Dim localCanExecuteAction As Predicate(Of Object) = Function(param) CmdCanExecute(param)
' [Opcional] Juego de teclas que activan el comando (P.e: Ctrl + D)
Dim localGesture As New KeyGesture(Key.D, ModifierKeys.Control, "Borrar [Ctrl+D]")
' [Opcional][Informativo] El nombre de este command (El nombre de esta clase)
Dim localNombreCommand As String = System.Reflection.MethodBase.GetCurrentMethod.DeclaringType.Name
' [Opcional][Informativo] Descripción de lo que hace este command.
Dim localDescripcion As String = "Borra el contenido de texto de un control TextBox pasado por parámetro"
' ¿¿ Se disparan los eventos [ExecuteStart] y [ExecuteCompleted] ??
Dim localDispararEventos As Boolean = False
'-------------------------------
' Cargar valores en la clase base
'-------------------------------
' Obligatorias
MyBase._executeAction = localExcuteAction
MyBase._canExecuteAction = localCanExecuteAction
' Opcionales
MyBase.KeyGesture = localGesture
MyBase.ComandoNombre = localNombreCommand
MyBase.ComandoDescripcion = localDescripcion
MyBase.DispararEventosExecuterStartCompleted = localDispararEventos
End Sub
'''
''' Esta función Borra todo el texto de un textBox pasado por parámetro
'''
Private Sub CmdExecute(ByVal parameter As Object)
'---------------------------------
' Se manejan en la clase base
' Me.EstaEjecutandose = True
'Call OnExecuteStart(parameter) ' Disparar el evento (personalizado) previo
'
'---------------------------------
' El proceso (la tarea) que realiza este command
If parameter IsNot Nothing Then
Dim target As TextBox = Nothing
Try
target = TryCast(parameter, TextBox)
If target IsNot Nothing Then
If target.Text.Length > 0 Then
target.Clear()
End If
End If
Catch ex As System.Exception
' No hacer nada
' No funciona y no se ejecuta el command
'------
Finally
If target IsNot Nothing Then
target = Nothing
End If
End Try
End If
'---------------------------------
' Se manejan en la clase base
' Call OnExecuteCompleted(parameter, localEx)' Disparar el evento (personalizado) Final
' Me.EstaEjecutandose = False
End Sub
'''
''' ¿ Se puede ejecutar el proceso execute? S/N
''' Esta función Comprueba que en TextBox haya un texto para poder ejecutar la función [Execute]
''' En este caso borrar el contenido del TextBox
''' Si hay un texto devuelve (True) [Si se puede ejecutar], si no hay texto devuelve false [No se puede ejecutar]
'''
'''
''' [True], el proceso se puede ejecutar. [False], pues no.
'''
Private Function CmdCanExecute(ByVal parameter As Object) As Boolean
'----------------------
' A) El resultado.
Dim localResultadoCanExecute As Boolean = False
'----------------------
' B) El control de si se puede ejecutar o no
'------------------------
' Normalmente la condición básica para poder realizar la tarea
' es que existan los datos de entrada
' si existe otra condición puede cambiarse en la clase derivada
'------------------------
If parameter IsNot Nothing Then
Dim target As TextBox = TryCast(parameter, TextBox)
If target IsNot Nothing Then
If target.Text.Length > 0 Then
localResultadoCanExecute = True
End If
End If
End If
''----------------------
''C) Mirar si se dispara el evento o no
' Se hace en la clase base
'If Boolean.Equals(campoCanExecuteAnterior, localResultadoCanExecute) = False Then
' campoCanExecuteAnterior = localResultadoCanExecute
' MyBase.OnCanExecuteChanged()
'End If
'----------------------
'D) Devolver el resultado
Return localResultadoCanExecute
End Function
#Region "IDisposable Support. [Para clases derivadas] Implementación de .NET Version: [2015/03/22]"
Private _disposedValue As Boolean ' Para detectar llamadas redundantes
' IDisposable
Protected Overrides Sub Dispose(disposing As Boolean)
If Not Me._disposedValue Then
Me._disposedValue = True
If disposing Then
'------------------------------------------------------------------------------------------
' 1) Desechar objetos SI administrados.
' Un objeto administrado es cualquier objeto de .NET
' es un objeto de .NET que maneja el motor de ejecución de NET
'------------------------------------------------------------------------------------------
'If Not (objeto Is Nothing) Then
' objeto = Nothing
'End If
End If
'------------------------------------------------------------------------------------------
' 2) Liberar objetos NO administrados.
' Son recursos que NO administra el motor en tiempo de ejecución,
' como identificadores de ventanas (HWND),
' conexiones a bases de datos, un objeto creado directamente
' llamando al API de Windows, etc. el Word o Excel
'------------------------------------------------------------------------------------------
'------------------------------------------------------------------------------------------
' 3) Establecer campos grandes como Null.
'------------------------------------------------------------------------------------------
'------------------------------------------------------------------------------------------
' 4) La clase base (si existe)
'------------------------------------------------------------------------------------------
MyBase.Dispose(True)
End If
End Sub
#End Region
End Class
End Namespace