Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   .NET (https://www.clubdelphi.com/foros/forumdisplay.php?f=17)
-   -   Leer los botones con teclado (https://www.clubdelphi.com/foros/showthread.php?t=59963)

REHome 15-09-2008 07:14:27

Leer los botones con teclado
 
Hola:

He hecho un ejemplo colocando dos botones normales y un label1. Al pulsar el botón suelta un mensaje al label1:

Has pulsado la A.

Si pulso el botón con el ratón funciona bien como dije arriba, ahora al pulsar el teclado la letra "A" o la letra "B" no pasa nada.

La pregunta es. ¿Existe la posibiliodad de esa opción?





Code Snippetusing System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Leer_boton

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

label1.Text = "Has pulsado la A";

}

private void button2_Click(object sender, EventArgs e)

{

label1.Text = "Has pulsado la B";

}

}

}

Neftali [Germán.Estévez] 16-09-2008 09:37:38

¿Puedes capturar algun mensaje tipo KeyDown para las teclas que llame al OnClick del botón correspondiente segun la tecla?

cHackAll 16-09-2008 20:59:26

Al Text del Button, en lugar de definirlo como "A", definelo como "&A"

__hector 25-09-2008 15:36:37

Si coloca &A tendria que presionar Alt+A para simular el clic. Tienes la posibilidad de activar la propiedad KeyPreview del Form y evaluar la tecla presionada en el evento keydown, como te recomendaron anteriormente.

cHackAll 26-09-2008 01:45:38

Hola hector; ante la ausencia del interesado solo me queda
filosofar un poco acerca de este tema; yo tambien estoy convencido que lo dicho por Neftali es lo correcto, sin embargo considerando al formulario sin ningun otro control que no sea un par de botones y C# como lenguaje; lo que he comentado es lo que han pedido :D

REHome 26-09-2008 01:58:11

Lo eh sacado.

Código:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WAKeyPreview
{
    public partial class FormKeyPreview : Form
    {
        String Texto = "Se a presionado -> ";

        public FormKeyPreview()
        {
            InitializeComponent();
        }

        private void FormKeyPreview_Load(object sender, EventArgs e)
        {
            this.KeyPreview = true;
        }

        private void FormKeyPreview_KeyPress(object sender, KeyPressEventArgs e)
        {
            //switch (e.KeyChar)
            //{
            //    case (char)Keys.A:
            //        BtnA_Click(sender, new EventArgs());
            //        break;
            //    case (char)Keys.B:
            //        BtnB_Click(sender, new EventArgs());
            //        break;
            //    default:
            //        LblInfoPress.Text = Texto;
            //        break;
            //}
        }

        private void BtnA_Click(object sender, EventArgs e)
        {
            LblInfoPress.Text = Texto + " A";
        }

        private void BtnB_Click(object sender, EventArgs e)
        {
            LblInfoPress.Text = Texto + " B";
        }

        private void FormKeyPreview_KeyDown(object sender, KeyEventArgs e)
        {
            LblValue.Text = e.KeyValue.ToString();
            switch (e.KeyValue)
            {
                case 65:
                    BtnA_Click(sender, new EventArgs());
                    break;
                case 66:
                    BtnB_Click(sender, new EventArgs());
                    break;
                default:
                    LblInfoPress.Text = Texto;
                    break;
            }
        }
    }
}


egostar 26-09-2008 02:09:49

Hola

Acabo de probar lo que comento nuestro amigo cHackAll y efectivamente, al asignar en el text de los botones &A y &B al presional la tecla A o la tecla B hace lo que quieres y te olvidas de validar el keypress de tal forma que te ahorras todo el código que pusiste colocando en los eventos OnClick de cada botón esto:

Código:

        private void button1_Click(object sender, System.EventArgs e)
        {
                label1.Text = "Has pulsado la A";
        }

        private void button2_Click(object sender, System.EventArgs e)
        {
                label1.Text = "Has pulsado la B";               
        }

Salud OS

Edito: Eso, claro, asumiendo que solo tengas esos botones, sin nada mas :D

Caral 26-09-2008 02:16:24

Hola
Viendo el código se parece mucho a Delphi, es interesante.
Cuando tenga dinero y tiempo me conseguiré el c++Builder, aunque sea solo por curiosidad.
Saludos

REHome 26-09-2008 02:16:36

¿Así está mejor? Quiero ahcer el código más eficiente y corto.

Código:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WAKeyPreview
{
    public partial class FormKeyPreview : Form
    {
        String Texto = "Se a presionado -> ";

        public FormKeyPreview()
        {
            InitializeComponent();
        }

        private void FormKeyPreview_Load(object sender, EventArgs e)
        {
            this.KeyPreview = true;
        }

        private void BtnA_Click(object sender, System.EventArgs e)
        {
                label1.Text = "Has pulsado la A";
        }

        private void BtnB_Click(object sender, System.EventArgs e)
        {
                label1.Text = "Has pulsado la B";               
        }


        private void FormKeyPreview_KeyDown(object sender, KeyEventArgs e)
        {
            LblValue.Text = e.KeyValue.ToString();
            switch (e.KeyValue)
            {
                case 65:
                    BtnA_Click(sender, new EventArgs());
                    break;
                case 66:
                    BtnB_Click(sender, new EventArgs());
                    break;
                default:
                    LblInfoPress.Text = Texto;
                    break;
            }
        }
    }
}


REHome 26-09-2008 02:18:57

Cita:

Empezado por Caral (Mensaje 316433)
Hola
Viendo el código se parece mucho a Delphi, es interesante.
Cuando tenga dinero y tiempo me conseguiré el c++Builder, aunque sea solo por curiosidad.
Saludos

Que to sepa, Borland también tiene el C#.

Puedes descargar versiones gratuitas sobre C#, VB, C++ en su Web oficial aquí abajo y en español hasta la documentación y ayuda.

http://www.microsoft.com/express/download/

Ya me dirás si te gusta.

Caral 26-09-2008 02:33:32

Hola
Esta interesante, espero que sea legal.:D
Baje el c++ y puse la opción de Español.
Gracias por el dato, cuando tenga tiempo lo instalare y le daré un vistazo.
Lo que me da curiosidad es el tamaño del archivo, se baja muy rápido, no se si vendrá completo?.
Saludos

REHome 26-09-2008 02:48:28

Ese archivo pequeño descubrirás que es un poco grande. Se hará el resto de la descarga que pueden ser más de 450 MB. Es totalmente legal.

También puedes más abajo descargar la versión DVD con todos los lenguajes.


La franja horaria es GMT +2. Ahora son las 00:11:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi