[VB.Net] [WinForm] Arrière plan en dégradé dans une form

Objectif

Obtenir un dégradé comme arrière plan pour une fenêtre.

Méthode

Il suffit de modifier la fonction de l’événement OnPaint de la fenêtre concernée.

Par exemple pour obtenir un dégradé horizontal :

Imports System.Drawing.Drawing2D
...
Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
  Dim formGraphics As Graphics = e.Graphics
 
  Dim gradientBrush As New LinearGradientBrush(New Point(0, 0), New Point(Width, 0), Color.White, Color.DarkMagenta)
 
  formGraphics.FillRectangle(gradientBrush, ClientRectangle)
End Sub

Passage de paramètre(s) entre deux Form

La question revient souvent sur le forum donc j’ai écris ce petit article concernant le passage de paramètre entre deux Form. Pour l’exemple j’ai utilisé le VB mais c’est facilement transposable en C#.

Prenons donc le cas d’une Form1 qui appelle une Form2(via un bouton). Form2 doit pouvoir modifier une variable définie dans Form1.

Première méthode : On passe une référence de la Form1 via le constructeur de la Form2

Le code de Form1:

Public Class Form1
    ' La variable concernée doit être déclarée Public.
    Public variable As Integer
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        variable = 1
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Lors de l'instanciation de Form2, on passe la référence sur la Form1
        Dim dial As New Form2(Me)
 
        dial.ShowDialog()
 
        MessageBox.Show(variable.ToString())
    End Sub
End Class

Le code de Form2:

Public Class Form2
    ' L'objet Form1
    Private frm As Form1
 
    Public Sub New()
        ' Cet appel est requis par le concepteur.
        InitializeComponent()
 
        ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
    End Sub
 
    ' Le constructeur permettant le passage de la référence sur la Form1
    Public Sub New(ByRef pfrm As Form1)
        InitializeComponent()
 
        frm = pfrm
 
 
        frm.variable = 2
    End Sub
End Class

L’avantage de cette méthode est qu’on peut avoir accès à d’autres variables ou méthodes de Form1 pour autant qu’elles soient définies comme étant Public. Par contre, il sera impossible d’appeler Form2 à partir d’une autre fenêtre.

Deuxième méthode : On passe via une propriété de Form2

Code de Form1:

Public Class Form1
    Private locVariable As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        locVariable = 1
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim dial As New Form2()

        dial.Variable = locVariable

        dial.ShowDialog()

        MessageBox.Show(locVariable.ToString())
    End Sub
End Class

Code de Form2:

Public Class Form2
    Private frm As Form1

    Private locVariable As Integer

    Public Property Variable() As Integer
        Get
            Return locVariable
        End Get
        Set(ByVal value As Integer)
            locVariable = value
        End Set
    End Property

    Public Sub New()
        ' Cet appel est requis par le concepteur.
        InitializeComponent()
    End Sub
End Class

Troisième méthode : On passe la variable via le constructeur de Form2

Le code de Form1:

Public Class Form1
    Private locVariable As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        locVariable = 1
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim dial As New Form2(locVariable)

        dial.ShowDialog()

        MessageBox.Show(locVariable.ToString())
    End Sub
End Class

Le code de Form2:

Public Class Form2
    Private frm As Form1

    Private locVariable As Integer

    Public Sub New()
        ' Cet appel est requis par le concepteur.
        InitializeComponent()

        locVariable = 0
    End Sub

    Public Sub New(ByRef pVariable As Integer)
        ' Cet appel est requis par le concepteur.
        InitializeComponent()

        locVariable = pVariable
    End Sub
End Class

L’avantage des deux dernières méthodes étant que Form2 peut-être appelée d’une autre fenêtre.