IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Action sur la barre espace


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut Action sur la barre espace
    Bonjour,

    J'ai écris un programme, une Form , comprenant une vingtaine de bouton. Je voudrai que l appuie sur la barre espace fasse la meme actin que sur un bouton. J'ai écris un petit programme pour valider , ou j'ai 2 boutons, l'un génère un son, et le deuxième incrémente un compteur dont la valeur s'affiche dans un label. Je voudrai qu'en appuyant sur la barre espace un message s'affiche dans le label:

    j'ai bien vu qu'il fallait que KeyPreview soit a True, mais ça ne marche pas. Dans Google, j'ai cherché des exemples mais je n'ai rien trouvé. Si vous me donnez une page ou je trouve ma réponse, cela me va parfaitement. Je pense que le problème viens de la fonction : F_BarreEspace.

    Merci de votre aide.

    Pascal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    using Microsoft.DirectX;
    using Microsoft.DirectX.DirectInput;
    using Microsoft.DirectX.AudioVideoPlayback;
    using System.Collections;
     
    namespace utilisation_de_la_barre_espace
    {
        public partial class Form1 : Form
        {
            int variable; 
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, KeyPressEventArgs e)
               {
                        F_BarreEspace(e);
               }
     
            private void button_son_Click(object sender, EventArgs e)
            {
                System.Media.SoundPlayer player = new System.Media.SoundPlayer(Application.StartupPath + @"\sons\son_2.wav");
                player.Play();
            }
     
            private void button_compteur_Click(object sender, EventArgs e)
            {
                variable++;
                label1.Text = variable.ToString("D2");
            }
     
     
            private void F_BarreEspace(System.Windows.Forms.KeyPressEventArgs e = null)
            {
                if (e != null)
                {
                MessageBox.Show(e.KeyChar.ToString());
                    if (e.KeyChar == (char)Keys.Space)
                    {
                        MessageBox.Show("Test espace"); //b mettre ici la fonction espace
                      label1.Text = " la barre espace marche" + variable.ToString("d2");
                    }
                 }
                else
                {
                    MessageBox.Show("Test click");
                }
            }
     
     
        }  //  public partial class Form1 : Form
    }  //  namespace utilisation_de_la_barre_espace

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Par défaut
    Bonjour essaye d'overrider processCmdKey http://http://msdn.microsoft.com/en-...v=vs.110).aspx

  3. #3
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 667
    Par défaut
    Bonjour,

    comment as-tu gérer l'appui sur Espace ? As-tu mis un évenement KeyPress / KeyDown sur ta form ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            KeyPreview = true;
     
            private void AppuiEspace(object sender, KeyPressEventArgs e)
            {
                    if (e.KeyChar == (char)Keys.Space)
                    {
                        MessageBox.Show("Appui sur espace");
                    }
     
            }
    Pour moi ça marche , même si un bouton a le focus ou non. Donc quand tu dis que ça ne marche pas , il y a un message d'erreur ? Ou il ne se passe rien ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut
    Pixel,

    Je n'ai pas de message d'erreur, mais il ne se passe rien

    Effectivement, j'ai lu plusieurs fois KeyPress / KeyPress, mais je ne sais pas comment les intégrer. Est ce c'est je dois chercher ca dans les outil, car je ne les ai pas trouver dans les propriete de ma Form. J'ai bien lu :

    Dans un gestionnaire d'événements KeyPress, donnez à la propriété KeyChar de la classe KeyPressEventArgs la valeur de la nouvelle touche de caractère.

    Mais justement, je ne vois pas comment le faire, si c'est dans les propriete de la Form, oubien une ligne de code.

    Merci de votre aide.

    Pascal

  5. #5
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 667
    Par défaut
    Je voulais écrire KeyPress / KeyDown , pardon.

    Ce sont des évenements en fait , qui sont disponibles dans la liste des événements de ta Form :

    Nom : Visual_studio_c_sharp_properties.jpg
Affichages : 1765
Taille : 19,1 Ko

    Il faut cliqué sur l'onglet avec le petit "éclair" pour switché entre la liste des propriétés et la liste des évenements.La tu aura accès a tous les evenements possible pour ta form , dont KeyPress et KeyDown. Utilise plutôt KeyPress.

    Tu peux assigner une méthode a cet événement , ou en générer une en rentrant un nom.Si tu copies / colle le code que j'ai mis , l’événement pourra selectionner cette méthode et l’exécutera a chaque appui sur Espace.

    Tu peux aussi abonné ta form a l'evenement manuellement dans le pire des cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.NomDeLaMethode);
    Mais autant le faire par Visual Studio , c'est plus simple.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut
    Pixel,


    Merci.

    Effectivement, je n'avais pas vu les propriétés " Evenement", et ça marche mieux. Mais a présent, lorsque j'appuie sur la touche ENTER, la touche sur laquelle la souri est positionnée, agit. J'ai essayé avec un SWITCH- CASE de lancé plusieurs action différente, mais jai l'impresson que ca ne marche qu'avec une seul touche. Est ce normal, oubien est ce mon code à corriger. J'ai aussi l'impression que je ne peux utilise que des sons faisant moin de 50 kilo. Est ce normal ?
    J'imagine que je trouverai une page me donnant toute les propriétés des evenements.


    Merci pour ton aide.

    Pascal

  7. #7
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 667
    Par défaut
    Mais a présent, lorsque j'appuie sur la touche ENTER, la touche sur laquelle la souri est positionnée, agit. J'ai essayé avec un SWITCH- CASE de lancé plusieurs action différente, mais jai l'impresson que ca ne marche qu'avec une seul touche
    Je n'ai pas très bien saisi , il serait possible de voir le code en question ?

    J'ai aussi l'impression que je ne peux utilise que des sons faisant moin de 50 kilo. Est ce normal ?
    Je ne crois pas qu'il y ai une limite de poids , par contre , j'ai vu que tu utilisais SoundPlayer , et il ne prends en compte que les sons au format .wav , du coup si tu veux lire un mp3 (qui sont plus lourd que les .wav) c'est impossible , il te faudra passer par DirectX ou une librairie tierce.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut
    Pixel,


    Voici le code. Ce que je ne comprend pas, c'est que pour que l'action lié à la barre espace se fasse, je dois ajouter la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    messagebox.show( " appui sur Espace");
    En faite, ce que j'aimerai bien faire, c'est :
    appui sur la barre espace : action 1, ici je lance le son 1
    appui sur la barre Entree : action 2,
    et appui sur la barre sur une lettre, action 3
    ici, le action son le lancement d'un son

    a l'évènement load de ma forme, j'ai mis Form1_load

    Merci pour ton aide

    PAscal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    using Microsoft.DirectX;
    using Microsoft.DirectX.DirectInput;
    using Microsoft.DirectX.AudioVideoPlayback;
    using System.Collections;
     
    namespace utilisation_de_la_barre_espace
    {
        public partial class Form1 : Form
        {
            int variable; 
     
            public Form1()
            {
                InitializeComponent();
     
    ;
     
            }
     
            private void Form1_Load(object sender, KeyPressEventArgs e)
               {
     
               }
     
     
            private void AppuiEspace(object sender, KeyPressEventArgs e)
            {
            if (e != null)
                {
     
                    if (e.KeyChar == (char)Keys.Space)
                    {
                        MessageBox.Show("Appui sur espace");
                        F_son_3();
                    }
     
     
                            if (e.KeyChar == (char)Keys.Enter)
                            {
                                MessageBox.Show("Appui Entree");
                                F_son_4();
                            }                    
                }
     
            }  //  AppuiEspace(object sender, KeyPressEventArgs e)
     
     
            private void button_son_Click(object sender, EventArgs e)
            {
                System.Media.SoundPlayer player = new System.Media.SoundPlayer(Application.StartupPath + @"\sons\son_4.wav");
                player.Play();
            }
     
            private void button_compteur_Click(object sender, EventArgs e)
            {
                variable++;
                label1.Text = variable.ToString("D2");
            }
     
     
            public void F_son_1()
            {
                System.Media.SoundPlayer player = new System.Media.SoundPlayer(Application.StartupPath + @"\sons\son_1.wav");
                player.Play();
                label1.Text = ("son 1 ");
            }
     
            public void F_son_2()
            {
                System.Media.SoundPlayer player = new System.Media.SoundPlayer(Application.StartupPath + @"\sons\son_2.wav");
                player.Play();
                label1.Text = ("son 2 ");
            }    
     
     
            public void F_son_3()
            {
                System.Media.SoundPlayer player = new System.Media.SoundPlayer(Application.StartupPath + @"\sons\son_3.wav");
                player.Play();
                label1.Text = ("son 3 ");
            }
     
     
            public void F_son_4()
            {
                System.Media.SoundPlayer player = new System.Media.SoundPlayer(Application.StartupPath + @"\sons\son_4.wav");
                player.Play();
                label1.Text = ("son 4 ");
            }
            private void Form1_Load(object sender, EventArgs e)
            {
     
            }
     
            private void button_son_1_Click(object sender, EventArgs e)
            {
                F_son_1();
     
            }
     
            private void button_son_2_Click(object sender, EventArgs e)
            {
                F_son_2(); 
                label1.Text = ("son 2 ");
            }
     
            private void button_son_3_Click(object sender, EventArgs e)
            {
                F_son_3();
                label1.Text = ("son 3 ");
            }
     
            private void button_son_4_Click(object sender, EventArgs e)
            {
                F_son_4();
                label1.Text = ("son 4 ");
            }
     
     
        }  //  public partial class Form1 : Form
    }  //  namespace utilisation_de_la_barre_espace

  9. #9
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 667
    Par défaut
    Après quelques tests , j'ai trouvé ce qu'il n'allait pas.C'est en fait tes boutons qui parasitent l’événement KeyPress de ta Form.Du coup j'ai compris ce que tu voulais dire avant , je m'explique :

    Quand il n'y a pas de MessageBox.Show() :

    Tu appuies sur Espace , l’événement KeyPress capte bien l'appui.Donc il lance le son , après vérification de la touche.Le problème c'est que un des boutons de ta Form a déja le focus , et si on appuie sur Espace quand un bouton a le focus , ça le déclenche et donc la méthode du bouton est directement appelé.Du coup tu as a peine le temps d'entendre le son propre a Espace.

    Quand il n'y a MessageBox.Show() :

    La , vu que la MessageBox pop , le bouton n'a plus le focus , du coup ton événement peut se dérouler tranquillement.

    Donc si les boutons ne jouent pas de son , pas de soucis. Si c'est primordial , tu peux faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     bool touchePressee;
     
            private void Form1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e != null)
                {
                    if (e.KeyChar == (char)Keys.Enter)
                    {
                        F_son_3();
                        touchePressee = true;
                    }
     
                    if (e.KeyChar == (char)Keys.Space)
                    {
                        F_son_2();
                        touchePressee = true;                  
                    }
                }
     
            private bool CheckBoutonPressee()
            {
                if (touchePressee)
                {
                    touchePressee = false;
                    return true;
                }
                else
                {
                    return false;
                }
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                if (CheckBoutonPressee())
                    return;
     
                F_son_3();
            }
            }
    Cela permet de déclencher uniquement les événements de la Form lors d'un appui sur une touche.

    Mais bon , Entrée et Espace sont des raccourcis très utilisé , si tu fais comme ça , il faudra tout faire par la souris , mais je t'ai mis le code au cas ou.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut
    Pixel,

    Merci


    Pascal

Discussions similaires

  1. Récupérer temps d'appui sur la barre d'espace
    Par Paidon dans le forum Général Python
    Réponses: 11
    Dernier message: 22/11/2013, 23h55
  2. Réponses: 4
    Dernier message: 14/11/2011, 17h05
  3. Mise à jour automatique de la barre d'outil après action sur un bouton
    Par anis gaied dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/10/2011, 15h53
  4. Ajouter une action sur une barre de menu
    Par alex2746 dans le forum Qt
    Réponses: 2
    Dernier message: 01/04/2010, 15h39
  5. Action sur la barre outils
    Par majothi dans le forum Excel
    Réponses: 2
    Dernier message: 24/02/2009, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo