none
Form con KeyPreview=True y Cursor.Show() RRS feed

  • Pregunta

  •    Hola:

       Tengo un TextBox3 que oculta el cursor del raton hasta que se pulse la tecla Esc, con el siguiente código:

        Private Sub TextBox3_GotFocus(...
            Cursor.Hide()
        End Sub

        Private Sub TextBox3_KeyPress(...
               Dim tecla As Integer = Asc(e.KeyChar)
            If tecla = 27 Then      ' Tecla Esc pulsada
                Cursor.Show()
                CheckBox1.Focus()
            End If
        End Sub

    Este TextBox3 esta en el Form1 que, tiene activado el KeyPreview=True y muestra un mensaje de Ayuda al pulsar F1, con el código:

        Private Sub Form1_KeyDown(...
            'Inicalmente se activó en el Formulario la propiedad KeyPreview=True
            'Detecta si se pulso la tecla F1 (codigo ascii=112)
            If e.KeyCode = 112 Then
                Ayuda()
            End If
        End Sub

    Todo funciona perfectamente mientras no pulso F1  cuando tengo oculto el cursor en el TextBox3. Al hacerlo, se muestran los mensajes de Ayuda con un simple MsgBox. Se pulsa Enter para cerrar el mensaje y ya no aparece mas el cursor. Si pulso F1 con el cursor visible luego funciona bien.

    Gracias. Saludos


    • Editado AmFor sábado, 26 de mayo de 2012 7:05
    • Cambiado Enrique M. Montejo miércoles, 13 de junio de 2012 16:27 (De:Lenguaje VB.NET)
    sábado, 26 de mayo de 2012 6:43

Todas las respuestas

  • Hola

    Cuando cierras la ayuda ¿vuelve a tener el enfoque TextBox3?, yo e probado y funciona bien.
    A unas malas podrias guardar en una variable boolean el estado del cursor, justo antes de mostrar el mensaje de ayuda haces visible el cursor y al cierre de la ayuda consultas la variable y depende el valor ocultas el cursor

    Un apunte,

     If tecla = 27 Then     mejor     If tecla = Keys.Escape Then
     If e.KeyCode = 112 Then      mejor      If e.KeyCode = Keys.F1 Then

    sábado, 26 de mayo de 2012 9:50
  •     Cuando introdroduzco texto en el TextBox3 lo pongo de color oscuro  y cuando salgo queda en color blanco original.

       Cuando estoy escribiendo en el TextBox3 pulso F1 y muestra el mensaje de ayuda. Pulso Enter para cerrar y el cursor de texto sigue en la entrada de texto, pudiendo escribir, borrar, etc dentro del TextBox3 y sigue en color oscuro. Hasta aqui todo parece normal.

       Al pulsar Esc desaparece el cursor de texto, y se cambia el color a blanco, pero se ve el raton.

       he observado ahora que: Si uso TAB, sin pulsar F1, o MAY+TAB, para cambiar el foco... tampoco aparece el raton, pero si me cambia el color del TextBox3

    sábado, 26 de mayo de 2012 10:18
  • Podrias poner en el evento leave del textbox3, este evento ocurre cuando pierde el enfoque el textbox3

    Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave
          'Mostrar cursor

    End Sub

    sábado, 26 de mayo de 2012 10:26
  •  'Mostrar cursor te refieres a 

        Private Sub TextBox3_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox3.Leave
            Cursor.Show()
            TextBox3.BackColor = Color.White       ' Restablece el color el TextBox al perder el foco
        End Sub

    ya lo tenia. He observado otra cosa: al dar a F1, me salen 4 mensages MsgBox y pude cerrar 3 con el cursor del raton visble en el cuarto ya no salia. Normalmente no me salia, y no me ha vuelto a pasar.

    dices que a ti te funciona?. pues igual hay algún fallo en el programa, que hace mas cosas, aunque esto debería de funcionar también no?.

    Crees que deberia borrar todo y empezar a construir el codigo poco a poco? (copiando y pegando, claro)

    que diferencia hay y porque es mejor?  

    If tecla = 27 Then     mejor     If tecla = Keys.Escape Then
    If e.KeyCode = 112 Then      mejor      If e.KeyCode = Keys.F1 Then

    . yo lo del e. no lo controlo y el Me.tampoco, solo tengo una ligera idea de que se refiere al que esta en curso en ese momentto, como si dijera this. , o este. si lo escribiéramos en castellano. es asi?


    • Editado AmFor sábado, 26 de mayo de 2012 10:42
    sábado, 26 de mayo de 2012 10:40
  •  

        Private Sub textbox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles Button1.KeyPress

        End Sub

    e es un parametro del evento

    Me hace referencia a la clase donde esta el codigo, o sea al form1

    un ejemplo:

        private numero as integer

        private sub Suma (numero as integer)
             me.numero=numero
        end sub

    me.numero hace referencia a la variable que se declaro fuera de la Sub Suma
    numero
    es la variable del parametro del Sub


    • Editado ToniAG sábado, 26 de mayo de 2012 10:59
    sábado, 26 de mayo de 2012 10:58
  •     Private Sub Suma(ByVal numero As Integer)
            Me.numero = numero
        End Sub

    es un parametro de textbox1_KeyPress, de la misma forma que numero lo es de Sub Suma, entendi bien?. numero solo se ve dentro de Sub Suma no?.

        Private numero As Integer esta declarada como publica para la clase Form1 y privada para el resto de las clases (un modulo, por ejemplo), correcto?

    asi numero, en el Form1 no precisaria el Me. para ser usada dentro de la clase Form1. y para usarla desde otra clase, o modulo, habria que ponerMe.numero asi podria asignar un TextBox desde un modulo con Sub publicas  poniendo, por ej: Me.TextBox1="hola"

    voy bien o lo tengo todo liado?

    sábado, 26 de mayo de 2012 11:24
  • No solo dentro de su instancia de la clase o estructura

    un ejemplo:

    Public Class Form1 Public Nombre As String = "Formulario"

    ' Creamos una lista de objetos de la clase1
    Public Clase As New List(Of clase1) Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load ' creamos 3 instancias de clase1 Clase.Add(New clase1("Clase1")) Clase.Add(New clase1("Clase2")) Clase.Add(New clase1("Clase3")) MsgBox(Clase(1).Valor) ' = Clase2 MsgBox(Clase(2).Valor) ' = Clase3 MsgBox(Me.Nombre) ' = Formulario, hace referencia a nombre del form1
    ' o tambien
    MsgBox(Nombre)
    End Sub End Class Public Class clase1 Public Nombre As String Public Sub New(Nombre As String) Me.Nombre = Nombre End Sub ' Devuelve el valor de Nombre de la clase
    Public Function Valor() As String Return Nombre ' el valor de la instancia de la clase o estructura, dentro de esa clase o estructura 'o Return Me.Nombre ' el valor de la instancia de la clase o estructura, dentro de esa clase o estructura End Function End Class







    • Editado ToniAG sábado, 26 de mayo de 2012 12:32
    sábado, 26 de mayo de 2012 12:23
  • Lo he mirado y ejecutado y mas o menos lo entiendo, pero luego, al hacerlo yo me termino perdiendo y busco otra forma que aunque quizas sea mas compleja, ya conozco. Es como lo de hacer las variables privadas y las propiedades publicas. veo mas claro hacerlo todo publico y no confundirme al usarlas.me da que esto de las clases me va a costar manejarlo bien, pero no quiero abusar, asi que agradezco tus explicaciones y no te pregunto mas.

    Volviendo al tema de mi pregunta, 

    dices que a ti te funciona?. pues igual hay algún fallo en el programa, que hace mas cosas, aunque esto debería de funcionar también no?.

    Crees que deberia borrar todo y empezar a construir el codigo poco a poco? (copiando y pegando, claro) ?. O dejar solo lo que afecta a la pregunta empezando desde cero?. Tu que harias?. Gracias

    sábado, 26 de mayo de 2012 13:11
  • Eso depende de ti, pero yo lo que haría, dejaría el proyecto apartado y crearía uno nuevo solo para hacer pruebas con los ejemplos que te han dado, incluso el de validating, y según tus resultados lo implementas a tu proyecto y a una malas pues comienzas de nuevo

    sábado, 26 de mayo de 2012 13:25
  • Pues haré exactamente lo que me dices. Lo que si me gustaría es conservar el formulario. como puedo guardar solo el formulario?. Como puedo ir guardando en una carpeta los formularios que cree?.  Se que puedo borrar todos los codigos y me queda el formulario, pero no se como guardar independientemente solo el Form. Gracias
    sábado, 26 de mayo de 2012 14:33
  • En Archivos del menu de Visual Basic, puedes guardar el proyecto, los formulario, etc 
    sábado, 26 de mayo de 2012 14:42
  • Pues esa es la cosa que no lo veo. (no lo veo dentro del menu Archivos ni en ningun otro menu). he abierto un monton de cosas y lo unico que me ha pasado es que luego guarda los cambio sin preguntar y no veas que follon. menos mal que tenia copia de la carpeta completa. Se como hacer una instalacion. como sacar el .exe, pero los Form ni idea. hay 3 con el nombre del Form, pero ninguno es el diseño del formulario con los controles, los nombres, los colores, etc. O al menos yo no se mostralo. He pensado en hacer cosas corta e ir luego uniendolas, pero si no se como cargarlas ni donde estan, que no lose -y no sera porque no he buscado- esta un poco complicado. de todas formas, gracias
    sábado, 26 de mayo de 2012 15:00
  • Tienes que tener el form que quieres guardar activo, pero porque no creas un nuevo proyecto, sin eliminar ese

    sábado, 26 de mayo de 2012 15:09
  • Tienes que tener el form que quieres guardar activo, pero porque no creas un nuevo proyecto, sin eliminar ese

    sábado, 26 de mayo de 2012 15:09
  • eso no hace lo que yo quiero. me da que no me se explicar. Para mi el form es como un papel impreso en el voy escribiendo cosas. es como si fueran fotos. donde se guardan esas fotos, esos modeslo de impreso y como se cargan y que nombre y extension tienen. Para mi el form es como un fondo y debe ser muy simple guardarlos y cragarlos y unir varios en un mismo proyecto. debe ser tan facil que no lo veo, pero eso que me dices, sencillamente no lo hace. o si lo hace, yo luego no se como visualizarlo. gracias de todos modos
    sábado, 26 de mayo de 2012 15:17