2010-11-15 5 views
1

J'ai un contrôle. C'est une boîte de texte. Je veux dessiner une image à la gauche du contrôle. L'image doit être peinte en dehors du contrôle. Je pourrais le peindre mais à l'intérieur.Dessiner une image à partir d'un contrôle

Voici le code:

private static Image requiredIcon = Resources.Icon_required; 
    protected override void OnPaint(PaintEventArgs e) 
    { 
    base.OnPaint(e); 
    if (base.Enabled && string.IsNullOrEmpty(base.Text)) 
    { 
     e.Graphics.DrawImage(requiredIcon, 0, 0); 
    } 
    } 

Répondre

0

Je peux obtenir un parent et l'utiliser pour la peinture.

protected override void OnParentChanged(EventArgs e) 
    { 
    base.OnParentChanged(e); 
    base.Parent.Paint += new PaintEventHandler(Parent_Paint); 
    } 

    private void Parent_Paint(object sender, PaintEventArgs e) 
    { 
    if (base.Enabled && string.IsNullOrEmpty(base.Text)) 
    { 
     e.Graphics.DrawImage(requiredIcon, 0, 0); 
    } 
    } 
+0

C'est ce que je l'ai dit dans ma réponse;) –

+0

Presque la même chose. Mais je ne peux pas remplacer les méthodes des parents. Je ne sais rien à leur sujet – alga

1

au lieu de surcharger la méthode TextBox.OnPaint, vous devez surcharger la forme la (ou quel que soit le composant parent de la zone de texte) méthode OnPaint et peindre l'image à gauche côté de la TextBox. Vous ne pouvez pas faire en sorte que le TextBox dessine dans une zone en dehors de ses propres limites.

2

Créer un contrôle utilisateur composé d'un TextBox et un PictureBox. Ensuite, dans l'événement OnPaint de votre contrôle utilisateur, vous pourrez dessiner en dehors de la zone de texte (dans le contrôle PictureBox).

Voici une image de ce à quoi UserControl pourrait ressembler. Il contient un PictureBox et un TextBox.

alt text

Si vous voulez juste dessiner une icône vous suffit de assigné à la PictureBox. Ainsi, l'OnPaint peut ne pas être nécessaire dans votre cas.

2

Au lieu de dessiner l'image, vous pouvez créer un contrôle approprié, par ex. PictureBox, avec sa propriété Image définie sur la ressource d'image appropriée.

Il peut être plus facile de le faire au moment de la conception plutôt que de l'exécuter. Si l'image ne doit pas être affichée en mode initial, définissez sa propriété Visible sur false à la conception et définissez-la sur true au moment de l'exécution lorsque l'image doit être affichée.

+0

exactement ce que je vais suggérer :) –

Questions connexes