2010-08-03 4 views

Répondre

6

Cela nécessite de surcharger la méthode IsInputKey() du contrôle. Un peu de chirurgie supplémentaire est nécessaire pour laisser la boîte d'image se concentrer en premier lieu. Commencez par ajouter une nouvelle classe à votre projet, font ressembler à ceci:

using System; 
using System.Drawing; 
using System.ComponentModel; 
using System.Windows.Forms; 

class MyPictureBox : PictureBox { 
    public MyPictureBox() { 
     SetStyle(ControlStyles.Selectable, true); 
     SetStyle(ControlStyles.UserMouse, true); 
     this.TabStop = true; 
    } 
} 

Cela garantit que le contrôle peut obtenir la mise au point et peut être à onglets. , Vous aurez à côté de défaire les attributs pour les propriétés TabStop et TabIndex afin que l'utilisateur peut définir l'ordre de tabulation:

[Browsable(true), EditorBrowsable(EditorBrowsableState.Always)] 
public new int TabIndex { 
    get { return base.TabIndex; } 
    set { base.TabIndex = value; } 
} 

[Browsable(true), EditorBrowsable(EditorBrowsableState.Always)] 
public new bool TabStop { 
    get { return base.TabStop; } 
    set { base.TabStop = value; } 
} 

Ensuite, vous devez préciser à l'utilisateur que le contrôle a le focus si elle saura à quoi vous attendre lors de l'utilisation des touches du curseur:

protected override void OnEnter(EventArgs e) { 
    this.Invalidate(); 
    base.OnEnter(e); 
} 
protected override void OnLeave(EventArgs e) { 
    this.Invalidate(); 
    base.OnLeave(e); 
} 
protected override void OnPaint(PaintEventArgs pe) { 
    base.OnPaint(pe); 
    if (this.Focused) { 
     Rectangle rc = this.DisplayRectangle; 
     rc.Inflate(-2, -2); 
     ControlPaint.DrawFocusRectangle(pe.Graphics, rc); 
    } 
} 

Et enfin vous substituez IsInputKey() afin que le contrôle peut voir les touches fléchées:

protected override bool IsInputKey(Keys keyData) { 
    if (keyData == Keys.Up || keyData == Keys.Down || 
     keyData == Keys.Left || keyData == Keys.Right) return true; 
    return base.IsInputKey(keyData); 
} 

Compile. Déposez le nouveau contrôle du haut de la boîte à outils sur votre formulaire.

+0

Hey je remarque quand je clique droit je n'obtiens pas le foyer quand je fais clic gauche je fais. Savez-vous comment faire pour que tout clic se concentre? –

+1

C'est un comportement normal, essayez-le avec un bouton par exemple. Vous pouvez remplacer OnMouseDown et appeler this.Focus() pour le changer. –

+0

Hans! cela, juste là, était la vie sauve. bien peut-être pas, mais au moins les heures et les cheveux blancs économisent! –

Questions connexes