none
Supprimer le "bip" lors de l'ouverture d'un ColorDialog depuis un textbox RRS feed

  • Discussion générale

  • Bonjour à tous, pour une de mes applications qui fonctionne via des lignes de commande depuis un textbox (bouton non approprié), j'avais besoin d'un ColorDialog pour que les utilisateurs puissent choisir la couleur de texte de certain composant.

    Via la commande "!col" j'ouvre un Color dialog :

        Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
            If e.KeyCode = Keys.Enter Then
                e.SuppressKeyPress = True
    
                If TextBox1.Text = "!col" Then ColorDialog1.ShowDialog()
    
                TextBox1.Text = ""
            End If
        End Sub

    Ici malgré le  e.SuppressKeyPress = True un "ding" insupportable se fait entendre.

    Voici une astuce que j'ai trouvé pour y remédier via un timer et un nouveau thread :

        Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
            If e.KeyCode = Keys.Enter Then
                e.SuppressKeyPress = True
    
                ' Par sécurité, dans le cas ou que l'utilisateur choisi la même couleur qu'avant on arrête le timer.
                If Timer1.Enabled = True Then Timer1.Enabled = False
    
                If TextBox1.Text = "!col" Then
                    ' Définition de la couleur du cDia via une variable global.
                    ColorDialog1.Color = Couleur
    
                    ' On lance le ColorDialog dans un nouveau Thread pour éviter le "ding" et libère ainsi le formulaire.
                    Dim th As New Threading.Thread(AddressOf ColorDialog1.ShowDialog) : th.Start()
    
                    ' Activation d'un timer qui vas récupérer la couleur du cDia (inter. 10)
                    Timer1.Enabled = True
                End If
    
                TextBox1.Text = ""
            End If
        End Sub
    
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            ' Définition de la nouvelle couleur et arrêt du timer.
            If ColorDialog1.Color <> Couleur Then
                Couleur = ColorDialog1.Color
                TextBox1.ForeColor = Couleur
                Timer1.Enabled = False
            End If
        End Sub

    Voila, en espèrent que cela puisse servir à quelqu'un.

    dimanche 19 mai 2013 15:44

Toutes les réponses