2010-08-23 2 views
1

Je dois mettre en place des événements de pause et de reprise d'un lecteur MP3 dans le même événement de clic de bouton. Voici le code que je l'ai essayé et sa ne fonctionne pas, peut-il me donner la solutionProblème avec les événements C#

private void button3_Click(object sender, EventArgs e) 
{ 
    if (button3.Text == "Pause") 
    { 
     CommandString = "pause mp3file"; 
     mciSendString(CommandString, null, 0, 0); 
     Status = true; 
     button3.Text = "Resume";   
    } 
    if (button3.Text == "Resume") 
    { 
     CommandString = "resume mp3file"; 
     mciSendString(CommandString, null, 0, 0); 
    } 
} 
+1

Qu'est-ce qui ne fonctionne pas? La condition 'if' n'est pas vérifiée ou la fonction' mciSendString'? Si c'est la fonction 'mciSendString' vous devrez décrire ce qu'est cette fonction, d'où elle vient, ce qu'elle est censée faire, etc ... –

+2

Avez-vous envisagé de mettre en place une machine d'état? – DaeMoohn

+0

* "ça ne marche pas" * n'est malheureusement pas très utile pour nous. Peux-tu être plus précis? Avez-vous des erreurs?Est-ce que la pause fonctionne, mais pas le résumé, ou l'inverse? Est-ce que les boutons échouent, ou le MP3? Exceptions, accidents? Que se passe-t-il lorsque vous placez un point d'arrêt dans le gestionnaire d'événements, est-il touché et l'exécution suit-elle le chemin que vous attendez? – Abel

Répondre

5

Vous changez la propriété button3.Text dans la première instruction if. Lorsque la seconde instruction if est testée, elle est vraie (si les instructions sont exécutées à chaque clic de bouton lorsque la propriété Text est "Pause")

Utilisez if, sinon pour exécuter un bloc de code ou un autre.

Utilisez if, else if instructions si vous souhaitez également exécuter un test sur le deuxième bloc de code.

Vous devez également tenir compte de la possibilité qu'aucun de ces cas n'est vrai.

if (button3.Text == "Pause") 
{ 
    CommandString = "pause mp3file"; 
    mciSendString(CommandString, null, 0, 0); 
    Status = true; 
    button3.Text = "Resume"; 
} 
else if(button3.Text == "Resume") 
{ 
    CommandString = "resume mp3file"; 
    mciSendString(CommandString, null, 0, 0); 
    button3.Text = "Pause"; 
} 
+1

+1 pour un bon conseil (mais a raté le retour à "Pause" si) – Abel

+0

modifié pour inclure la réponse de @Arseny – Lewray

4

à première vue, il ne fonctionnera pas correctement parce que dans 2 cas

if (button3.Text == "Resume") 
{ 
    CommandString = "resume mp3file"; 
    mciSendString(CommandString, null, 0, 0); 
} 

vous avez manqué la ligne:

button3.Text = "Pause"; 

En fait, ce n'est pas une bonne idée de vérifier le bouton état par sa propriété de texte. En tant que solution simple, vous devez avoir un indicateur booléen pour le vérifier.

+0

+1 bien repéré – Abel

+0

Ah ... J'ai raté cela, mais j'ai remarqué les deux déclarations si – Lewray

+0

@Lewray c'est pas vous mais l'auteur :) – Arseny

1

vous avez deux instructions si if consécutives. Vous n'avez besoin que d'une instruction if/else.

changer votre code à:

if (button3.Text == "Pause") 
    { 
     CommandString = "pause mp3file"; 
     mciSendString(CommandString, null, 0, 0); 
     Status = true; 
     button3.Text = "Resume";   
    } 
    else if (button3.Text == "Resume") 
    { 
     CommandString = "resume mp3file"; 
     mciSendString(CommandString, null, 0, 0); 
    } 
0

Le problème est:

Au moment où vous arrivez à la seconde instruction if, vous avez modifié le texte du bouton, d'où les deux déclarations sont en cours d'exécution ...

Voici un test rapide:

 if (button1.Text == "Pause") 
     { 
      label1.Text = label1.Text + " saw pause "; 
      button1.Text = "Resume"; 


     } 
     if (button1.Text == "Resume") 
     { 
      label1.Text = label1.Text + " saw resume "; 
      button1.Text = "Pause"; 
     } 

retours: label1 a vu p Ause vu CV.

Il y a deux façons de corriger cela:

Vous pouvez insérer un « retour »; déclaration dans chaque instruction if:

private void button3_Click(object sender, EventArgs e) 
{ 

    if (button3.Text == "Pause") 
    { 
     CommandString = "pause mp3file"; 
     mciSendString(CommandString, null, 0, 0); 
     Status = true; 
     button3.Text = "Resume"; 
     return; 
    } 
    if (button3.Text == "Resume") 
    { 
     CommandString = "resume mp3file"; 
     mciSendString(CommandString, null, 0, 0); 
     button3.Text = "Pause"; 
     return; 
    } 
} 

Ou d'autre part, vous pouvez saisir la valeur du texte du bouton une fois:

private void button3_Click(object sender, EventArgs e) 
{ 
    String value = button3.Text; 
    if (value == "Pause") 
    { 
     CommandString = "pause mp3file"; 
     mciSendString(CommandString, null, 0, 0); 
     Status = true; 
     button3.Text = "Resume"; 

    } 
    if (value == "Resume") 
    { 
     CommandString = "resume mp3file"; 
     mciSendString(CommandString, null, 0, 0); 
     buton3.Text = "Pause"; // As mentioned before, this is required too. 
    } 
} 

espoir qui aide.

Steve