Estoy implementando un control personalizado que hereda de Control
. Quiero que sea enfocable (es una especie de cuadro de lista).¿Realmente tengo que llamar a Focus en OnMouseDown de mi control personalizado?
En el constructor, que hago
SetStyle(ControlStyles.Selectable, true);
ahora puedo usar Tab para desplazarse al control.
Sin embargo, cuando el control recibe un clic del mouse, no reclama automáticamente el foco. Puedo solucionar este problema, por supuesto:
protected override void OnMouseDown(MouseEventArgs e)
{
Focus();
base.OnMouseDown(e);
}
Pero esto se siente como una chapuza que no debería ser necesario. ¿Es este realmente el camino a seguir? ¿O hay alguna forma de decirle al Control
que reclame el enfoque automáticamente cuando recibe un clic del mouse?
@Thomas: mencionas "Ya tenía el rectángulo de foco en su lugar": ¿estás haciendo esto sobrepasando OnGotFocus, y OnLostFocus y llamando a ControlPaint.DrawFocusRectangle? Apreciar cualquier respuesta. – BillW
@BillW: Sí, eso es lo que hago. 'OnGotFocus' y' OnLostFocus' invalidan el rectángulo que contiene el rectángulo de foco; 'OnPaint' comprueba la propiedad' Focused' y llama 'ControlPaint.DrawFocusRectangle' según sea necesario. – Thomas
sus respuestas de los pacientes a mis preguntas muy apreciadas! Estoy publicando una respuesta más que es la única forma en que puedo hacer que esto funcione en Visual Studio RC1 compilado contra FrameWork 3.5 (completo). Por "trabajo": me refiero a que cuando el control está "tabtado a:" se muestra un rectángulo de selección, y cuando "tabbed-away-from" el rectángulo de selección desaparece: y cuando se presiona el control se muestra el rectángulo de selección. – BillW