9
votes

Triple Mouse Cliquez dans C #?

in MS-Word Les événements de clic de souris sont utilisés comme:

Cliquez sur un seul clic - Passage du curseur
Double-clic - Sélectionne le mot
Triple Click - sélectionne le paragraphe

en C # Je peux gérer des événements simples et doubles sur la souris, mais je veux gérer un clic de la souris Click dans C # Windows Textbox

Exemple: xxx


0 commentaires

5 Réponses :


2
votes

Il vous suffit de stocker l'heure à un double clic sur cette case. Ensuite, dans le gestionnaire en un seul clic, vérifiez si un double clic est arrivé il y a plus de N millisecondes (n = 300 ou plus).

Dans ce cas, appelez votre fonction TripEleclick () directement ou définissez un nouvel événement pour que vous a dérivé «triplecickawaretextbox».


2 commentaires

NE PAS Devinez Un temps qui va être trop court pour certains utilisateurs, trop longtemps pour les autres. Utilisez le temps que l'utilisateur a configuré dans son système d'exploitation comme heure de double clic préféré. Il est accessible via Systeminformation.doubleclickTime - msdn.microsoft .com / fr-nous / bibliothèque / ...


Vous souhaitez également vous assurer que chaque clic survient dans une zone de sélection du dernier clic, avec la taille SystemInformation.DoubleclickSize.



7
votes

Regardez ceci: MouseButToneventargs.ClickCount

qui devrait le couvrir, je suppose.


2 commentaires

Pour les formulaires de Windows (plutôt que WPF), il voudrait probablement que la propriété de MouseEventventargs.ClickCount très similaire: msdn.microsoft.com/en-us/library/...


... Sauf que cela ne fonctionne pas dans Winforms. Dans une zone de texte au moins, ClickCount ne renvoie jamais 1 ... même sur un double-clic!



2
votes

Je travaillais sur un problème similaire sur C ++

Tout d'abord, vous devez comprendre comment les événements sont tirés, je vais prendre un clic à l'aide du bouton gauche de la souris: - Cliquez une fois -> bouton gauche cliquez sur l'événement tiré - Double-clic -> Double-gauche Double-clic Evénement Faire le feu

Windows vous prend en charge uniquement jusqu'à ce niveau.

Pour triple clic, c'est essentiellement un clic à la suite d'un double clic avec l'entretien entre temps assez petit. Ainsi, ce que vous devez faire est de gérer un événement de clic, de vérifier s'il y avait un double clic avant cela et de tirer un événement triple clic.

si le code est différent, voici comment je le fais: < / p>

  • Déclarez DoubleClickTime & DoubleClickInterval pour stocker la dernière fois que nous double clic et le temps entre les clics.
  • Déclarez tripleclickeventsfird pour indiquer que nous avons déjà tiré un événement (init à FALSE)

    manuteners

    cliquez sur le manutention xxx

    double Cliquez sur le gestionnaire xxx

    Les fonctions que j'utilise était la suivante:

    • horloge (): Obtenez l'heure actuelle du système dans l'unité
    • getdoubleclickTime (): une fonction fournie par Windows pour obtenir le temps entre les clics
    • le "* horlogs_per_sec / 1000;" La partie est destinée à dissimuler la valeur de retour de GetDouBleclickTime () à l'unité '' '

      Remarque: Le 3ème clic se déclenche à la fois un événement de clic et double-cliquez sur le niveau système


0 commentaires

5
votes

Faites ceci:

    private int _clicks = 0;
    private System.Windows.Forms.Timer _timer = new System.Windows.Forms.Timer();
    private void txtTextMessage_MouseUp(object sender, MouseEventArgs e)
    {
        _timer.Stop();
        _clicks++;
        if (_clicks == 3)
        {
            // this means the trip click happened - do something
            txtTextMessage.SelectAll();
            _clicks = 0;
        }
        if (_clicks < 3)
        {
            _timer.Interval = 500;
            _timer.Start();
            _timer.Tick += (s, t) =>
            {
                _timer.Stop();
                _clicks = 0;
            };
        }
    }


1 commentaires

J'aime le code qui vient de tomber et de fonctionner. +1. Merci!



1
votes

J'ai adapté la réponse de Jimmy T pour encapsuler le code dans une classe et faciliter la demande à plusieurs contrôles sur un formulaire.

La classe est la suivante: P>

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        myTextBox.Tag = new UIHelper.TripleClickHandler(myTextBox);
    }
}


0 commentaires