Comment faire un simple "repeat button"

Signaler
Messages postés
8
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
29 octobre 2009
-
gnomathibus
Messages postés
8
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
29 octobre 2009
-
Bonjour, je développe actuellement une application pour pocket pc en compact framwork 2 et malgré mes recherches je n'ai pas trouvé le moyen de faire simplement un "repeat button" afin d'incrémenter automatiquement une valeur lorsque ce fameux bouton reste appuyé, si quelqu'un à une idée ? Merci

14 réponses

Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
1
Salut,

Tu peux mettre un Timer et regarder toutes les x secondes si le bouton est enfoncé ou non, et ça incrémente ton compteur en conséquence.

Autre solution : lorsqu'on appuie sur ton bouton ça met une variable à True.
Lorsqu'on le relâche ça la met à False.
Toutes les x secondes (toujours avec un Timer), tu regardes si ta variable est à True ou False et tu incrémente ton compteur en conséquence.
Messages postés
8
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
29 octobre 2009

Salut,
Merci pour ton éclaircissement à ma question, par contre je ne trouve pas le nom de la propriété d'un bouton enfoncé si tu une idée sur la question et merci encore pour la réponse
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
1
En effet je ne trouve pas non plus la propriété.
Je te conseilles ma 2e méthode du coup :p
Messages postés
8
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
29 octobre 2009

pour la deuxième méthode, c'est comme la première je pense, il faut bien avoir la propriété du bouton pour mettre la variable à true ou false ?
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
1
Non, il suffit de double cliquer sur ton bouton dans le concepteur (Maj + F7), ce qui te crée une sub vierge qui correspond à l'événement du clic du bouton :

Private Sub Bouton1_Click(...) etc

'Tu mettra ton code ici

End sub
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
Hello,

Je conseil d'utiliser plutôt l'évênement Keydown, et mousedown, car l'event click relate le key/mouse down suivi du up. en gros lorsque tu as effectuer les deux évênements.

dans ton ...down, tu peux y déclencher un timer effectivement qui lui incrémentera ta valeur, en prennant en compte que chaque elapsed incrementera donc la vitesse d'increment dépend de la vitesse ton timer.

et n'oubli pas de désactivé le timer lors du ...Up

et si tu as quelques soucis pour l'affichage, tu peux faire un application.DoEvent()

et vraiment si cela ne marche pas.... regarde du côté des threads....

Chris...Web : Firstruner
Messages postés
8
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
29 octobre 2009

Merci, pour ta réponse cboulas, en faite j'ai trouvé une class de ce site http://www.codeproject.com/KB/cpp/RepeatButton.aspx qui marche parfaitement bien en framework, mais en "compact framework" quand appuis sur un bouton rien ne se passe ; je pense que la méthode MouseEventArgs ne doit pas être adapté au tactile un truc comme ça, en faite je suis pas assez expérimenté pour trouver le pb tout seul

Public Class RepeatButton
               Inherits System.Windows.Forms.Button

     Public Sub New()
          AddHandler timer.Tick, AddressOf OnTimer
          timer.Enabled = False
     End Sub

     Public Timer As New timer
     Public Property Interval() As Integer
         Get
               Return timer.Interval
         End Get

         Set(ByVal Value As Integer)
               timer.Interval = Value
         End Set
    End Property

     Private Sub OnTimer(ByVal sender As Object, ByVal e As EventArgs)
          'fire off a click on each timer tick 

          OnClick(EventArgs.Empty)
     End Sub

     Private Sub RepeatButton_MouseDown(ByVal sender As Object, ByVal e As  _
     System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
          'turn on the timer 

          timer.Enabled = True
     End Sub

     Private Sub RepeatButton_MouseUp(ByVal sender As Object, ByVal e As _
     System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
          ' turn off the timer 

          timer.Enabled = False
     End Sub

End Class
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
Pour le tactile, il s'agit en fait d'un simple contrôle de la souris, tu devrais alors t'en sortir en cherchant vers le contextmenu ou un truc de ce genre, je vais m'y pencher car ça m'interesse


Chris...Web : Firstruner
Messages postés
8
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
29 octobre 2009

si tu trouve un truc qui marche fait moi signe, ca fait quelque jours que je m'arrache les cheveux à ce pb, sinon j'ai pensé à trouver un code d'un numericUpDown pour voir comment c'est fait car ça resemble un peu dans le principe à un repeat button
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
Re,

voici un code source que tu pourra facilement transcrire en VB.Net et qui fonctionne

    public partial class Form1 : Form
    {
        private int i = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (!timer1.Enabled) { timer1.Enabled = true; }
        }

        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            timer1.Enabled = false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            i++;
            label1.Text = i.ToString();
        }
    }


Chris...Web : Firstruner
Messages postés
8
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
29 octobre 2009

Salut merci pour ton code, mais marche toujours pas en compact framework ou à moins que j'ai mal adapté le code, par contre sur le code trouvé précédemment j'ai remplacé par un keyup et down et sa marche avec avec les touche du clavier mais pas moyen avec la souris
Messages postés
8
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
29 octobre 2009

Après avoir fais mes investigations se weekend avec l'aide du code fournis par cboulas, je viens de m'apercevoir qu'en netcf l'évènement "MouseEventArgs" s'applique bien avec un objet "Form" mais pas avec un objet "button" donc pour moi de retour à la case départ pour se fameux problème de "repeat button" en netcf.
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
Il te reste une solution, générer l'image d'un boutton et le charger dans un picturebox qui je crois gère le mousedown, ou dans un panel


Chris...Web : Firstruner
Messages postés
8
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
29 octobre 2009

Merci à toi cboulas pour tes éclaircissements, car je me suis entêté à vouloir associer un MouseEvent avec un button, alors qu'il y a des tas de button controls qui gère sans pb le mousedown et up, pour ma par j'ai fusionné ce "picture button control" qui gère nickel la transparence : picture button for the .NET compact framework et le code du repeat button et ça marche enfin à merveille en NETCF !!!! encore merci je vais pouvoir continuer mon appli !!