Bonjour,

avec le code suivant je veux tout betement tracer une ligne dans une PictureBox, soit en style "Solid" avec le bouton1, soit en style "pointille" avec le bouton2.
Je veux egalement que ce graphique soit persistant meme si il est recouvert momentanement par une autre fenetre par exemple. C'est pourquoi j'utilise 'Invalidate' qui, si j'ai bien compris, force le retracage du controle vise.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Imports System.Drawing
Public Class Form1
  Dim Crayon As Pen = New Pen(Color.Black)
  Public g As Graphics
  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    g = Graphics.FromHwnd(Me.PictureBox1.Handle)
  End Sub
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Crayon.DashStyle = Drawing2D.DashStyle.Solid
    PictureBox1.Invalidate()
  End Sub
  Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Crayon.DashStyle = Drawing2D.DashStyle.Dot
    PictureBox1.Invalidate()
  End Sub
  Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint, Me.Paint
    g.DrawLine(Crayon, 10, 10, 100, 100)
  End Sub
End Class
Il y a 2 choses que je ne comprends pas :

1/ Je suis oblige d'ajouter 'Me.Paint' dans les Handles de l'evenement PictureBox1_Paint pour voir ma ligne, du coup celle ci est tracee des le demarrage de la feuille ce que je ne veux pas et je pensais que le Handle PictureBox1.Paint suffisait mais visiblement non, pourquoi ?

2/ Si je clique sur le bouton 1 ou 2, ma ligne est effacee mais n'est pas retracee tant que le curseur de souris est au dessus du bouton sur lequel je viens de cliquer. Pqreil, si jappuis sur la touche 'Entree' quand un bouton a le focus, je dois ensuite taper Tabulation pour donner le focus a l'autre bouton pour que la ligne soit tracee, la encore : pourquoi et y a t'il un moyen de corriger ce probleme ?

Merci par avance pour votre aide.