Tableau qui change de couleur, seulement quand un bouton de la sourie est appuyé

Description

Suite a une question que j'ai poster sur le forum, j'ai trouver la solution
Voici ce que dois faire le code

-Création d'un tableau de Label, sous la forme 7 de large X 24 de haut
-Analyse de la position de la sourie, grâce à un mouseMove
-Changer la couleur correspondante au Label où se trouve la sourie (Attention, le label doit pas clignoter, donc on doit savoir quand on entre la première fois dessus et quand on change de label
-Changer seulement la couleur quand un clic de la sourie est appuyé

c'est le dernier point qui est dur, puisqu'en VB.Net, quand on appui sur une touche, le focus reste sur le dernier Label apuyé, malgré qu'on détecte le mouseMove

Source / Exemple :


Public Class GroupeHeure
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

'Vérificateur pour empêcher de clignoter

    Dim validerX As Integer
    Dim validerY As Integer
    Public Sub New()
        MyBase.New()
        Dim i As Integer, j As Integer
        Dim handlerHoraireMove As MouseEventHandler = New MouseEventHandler(AddressOf HoraireMove)

'Construction du tableau

        For i = 0 To 6
            For j = 0 To 23
                Me.Label(i, j) = New System.Windows.Forms.Label

                AddHandler Label(i, j).MouseMove, handlerHoraireMove

                Me.Label(i, j).BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
                Me.Label(i, j).Location = New System.Drawing.Point(145 + 80 * i, 40 + j * 15)
                Me.Label(i, j).Name = "Label1"
                Me.Label(i, j).Size = New System.Drawing.Size(80, 15)
                Me.Label(i, j).Tag = 1

                Me.Controls.Add(Me.Label(i, j))
            Next j
        Next i
        'This call is required by the Windows Form Designer.
        InitializeComponent()
        Me.Show()
        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.

    Friend Label(6, 23) As System.Windows.Forms.Label

    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.SuspendLayout()
        '
        'GroupeHeure
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.BackColor = System.Drawing.Color.AliceBlue
        Me.ClientSize = New System.Drawing.Size(772, 527)
        Me.Name = "GroupeHeure"
        Me.Text = "Création des Groupe d'heure de travail"
        Me.ResumeLayout(False)

    End Sub

#End Region

'Mon mousemove

    Private Sub HoraireMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Dim i As Integer, j As Integer
        If e.Button <> MouseButtons.None Then
            i = vertical(CType(sender, Label).Top + e.Y)
            If i >= 0 Then
                j = Horizontal(CType(sender, Label).Left + e.X)
                If j >= 0 Then
                    ChangerCouleur(Label(j, i), i, j)
                End If
            End If
        End If
    End Sub

'Détecter le X et le Y du tableau

    Private Function vertical(ByVal Y As Single) As Integer
        Dim i As Integer
        If Y >= 40 And Y < 400 Then
            i = Int((Y - 40) / 15)
            Return i
        Else
            Return -1
        End If
    End Function

    Private Function Horizontal(ByVal x As Single) As Integer
        Dim i As Integer
        If x >= 145 And x < 705 Then
            i = Int((x - 145) / 80)
            Return i
        Else
            Return -1
        End If
    End Function

'Changer mes couleur et vérification si on a changer de label

    Private Sub ChangerCouleur(ByVal CLabel As Label, ByVal i As Integer, ByVal j As Integer)
        Dim ok As Boolean = False
        Try
            If validerX <> j Or validerY <> i Then
                ok = True
            End If
        Catch
            ok = True
        End Try

        If ok Then
            If CLabel.Tag = 1 Then
                CLabel.BackColor = Color.SteelBlue
                CLabel.Tag = 2
            Else
                CLabel.BackColor = Color.AliceBlue
                CLabel.Tag = 1
            End If
            validerX = j
            validerY = i
        End If
    End Sub
End Class

Conclusion :


Désoler, je peux pas mettre mon application, puisque ça fasi partie d'une très grosse application que je fais et ça fais très longtemps qu'elle a dépasser le 1 mo compressé

mais vous avez seulement à al mettre dans une forme et ça devrasi amrcher au complet

j'ai ajouter un exemple de son utilisation, j'ai du presque tout supprimer pour pouvoir mettre seulement ça, mais bon, ça va vous donner un exemple de ce qu'on peut faire avec

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.