Comment faire un simple "repeat button"

gnomathibus Messages postés 8 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 29 octobre 2009 - 20 oct. 2009 à 11:16
gnomathibus Messages postés 8 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 29 octobre 2009 - 29 oct. 2009 à 22:18
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

cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 1
21 oct. 2009 à 08:10
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.
0
gnomathibus Messages postés 8 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 29 octobre 2009
21 oct. 2009 à 11:47
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
0
cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 1
21 oct. 2009 à 11:55
En effet je ne trouve pas non plus la propriété.
Je te conseilles ma 2e méthode du coup :p
0
gnomathibus Messages postés 8 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 29 octobre 2009
21 oct. 2009 à 12:08
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 1
21 oct. 2009 à 12:24
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
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
24 oct. 2009 à 09:44
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
0
gnomathibus Messages postés 8 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 29 octobre 2009
24 oct. 2009 à 11:02
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
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
24 oct. 2009 à 11:13
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
0
gnomathibus Messages postés 8 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 29 octobre 2009
24 oct. 2009 à 11:30
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
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
25 oct. 2009 à 13:17
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
0
gnomathibus Messages postés 8 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 29 octobre 2009
25 oct. 2009 à 14:06
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
0
gnomathibus Messages postés 8 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 29 octobre 2009
28 oct. 2009 à 09:45
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.
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
28 oct. 2009 à 11:05
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
0
gnomathibus Messages postés 8 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 29 octobre 2009
29 oct. 2009 à 22:18
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 !!
0
Rejoignez-nous