' /** ' --------------------------------------------- ' [- (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