Pregunta

Tengo un control que se deriva de Forms.Control, que maneja los eventos de ratón y eventos de pintura muy bien, pero estoy teniendo un problema con los eventos clave. Necesito manejar flecha izquierda y flecha derecha, pero hasta ahora el control de ficha que contiene mis come clase éstos.

¿Cómo hago esto seleccionable de control, enfocable?

¿Fue útil?

Solución

Aquí hay un tutorial bueno hacer un control enfocable. Me limitaba a seguir para asegurarse de que funciona. Además, añadió un evento de pulsación de tecla al control que funciona con la condición de que el control tiene el foco.

http://en.csharp-online.net/Architecture_and_Design_of_Windows_Forms_Custom_Controls%E2 % 80% 94Creating_a_Focusable_Control

Básicamente todo lo que hice fue hacer una instancia de mi control personalizado, que hereda de control. Luego añadió KeyPress, Click, y Paint evento. pulsación de tecla era sólo un mensaje:

void CustomControl1_KeyPress(object sender, KeyPressEventArgs e)
{
        MessageBox.Show(string.Format("You pressed {0}", e.KeyChar));
}

Haga clic en evento acaba de:

this.Focus();
this.Invalidate();

El evento de dibujo que hice de esta manera, por lo que solo era visible:

protected override void OnPaint(PaintEventArgs pe)
{
        if (ContainsFocus)
            pe.Graphics.FillRectangle(Brushes.Azure, this.ClientRectangle);
        else
            pe.Graphics.FillRectangle(Brushes.Red, this.ClientRectangle);
}

A continuación, en la forma principal, después de hacer una instancia llamada MyCustomControl y la adición de los controladores de eventos:

mycustomcontrol.Location = new Point(0, 0);
mycustomcontrol.Size = new Size(200, 200);
this.Controls.Add(mycustomcontrol);

El ejemplo es mucho más limpio que mi código de cinco minuto, sólo quería estar seguro de que era posible resolver el problema de esta manera.

La esperanza de que era muy útil.

Otros consejos

Con el fin de ser seleccionable, de su control tiene que tener la ControlStyles.Selectable . Usted puede hacer esto en el constructor llamando SetStyle .

Sin ver su código, sólo puedo decir que he creado un recipiente 3 pestaña, y ha creado un control muy simple que hizo caso omiso de la OnGotFocus:

public partial class CustomControl1 : Control
{
    public CustomControl1()
    {
        InitializeComponent();
    }

    protected override void OnGotFocus(EventArgs e)
    {
        this.BackColor = Color.Black;
        base.OnGotFocus(e);
    }
    protected override void OnPaint(PaintEventArgs pe)
    {
        base.OnPaint(pe);
    }
}

Me dejó caer el control en el formulario junto con un par de otros botones, ajustar la tabulación apropiada, y el comportamiento fue el esperado. Alguna otra propiedad por defecto se ha cambiado en el código que está causando el control para que no pueda seleccionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top