VB.net - Geräusch-Problem

Cathryn

Cadet 1st Year
Registriert
Nov. 2007
Beiträge
9
Hallo an alle,

ich schreibe einen kleinen Mathematiktrainer, der bei richtigen oder falsche antwort jeweils einn Ton ausgibt. Das funktioniert, aber am Ende der Sub wird ein zusätzlichen Geräusch ausggeben (egal, ob vorher ein ton gespielt wurde oder nicht). Der Ton klingt wie ein dumpfes Pong.

Hier die Sub

Private Sub txtLoesung_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtLoesung.KeyDown
If e.KeyValue = Keys.Enter Then
If ergebnis.ToString = txtLoesung.Text Then
richtig += 1
If soundRichtig Then
My.Computer.Audio.Play(soundRichtigDatei, AudioPlayMode.WaitToComplete)
End If

Else
falsch += 1
If soundFalsch Then
My.Computer.Audio.Play(soundFalschDatei, AudioPlayMode.WaitToComplete)
End If
End If

txtRichtig.Text = richtig.ToString
txtFalsch.Text = falsch.ToString
txtLoesung.Text = ""
neueAufgabe()
End If
End Sub 'Hier kommt das Geräusch

Hat jemand eine Idee, woran es liegt. An sich get die Applikation, aber der Ton ist mehr als störend.

greetings
Cathryn
 
Bist du sicher das es innerhalb der Sub passiert oder ausserhalb an der Stelle die direkt oder nahezu direkt danach kommt ?
 
Ja, es kommt beim verlassen der sub.
Danach wartet das Programm nämlich wieder auf Benutzereingaben.
 
Hast du das Programm schon mal compiliert, erscheint der Ton dann auch?
 
Was passiert bei "NeueAufgabe()" ?
 
Hallo,

der Ton kommt auch nach dem Kompelieren und auch während des Debuggens.

Private Sub neueAufgabe()

'Rechenbereich und Level-Aushwahl auswerten
If levelHoch And anzahlAufgabenHoch = richtig + 1 Then
Rechenbereich.Text += 10
anzahlAufgabenHoch += richtig
End If
z1 = zahl1.Next(1, Rechenbereich.Text)
z2 = zahl1.Next(1, Rechenbereich.Text)

'
'Aufgabe erstellen
'
aufgabe = z1.ToString 'Zahl 1

'Rechenart
r = rechenart.Next(1, 4)
Select Case (r)
Case 1
aufgabe += " + "
ergebnis = z1 + z2
Case 2
aufgabe += " - "
ergebnis = z1 - z2
Case 3
aufgabe += " * "
ergebnis = z1 * z2
Case 4
aufgabe += " / "
ergebnis = z1 / z2
End Select
aufgabe = aufgabe + "" + z2.ToString + " = " ' Zahl 2
labAufgabe.Text = aufgabe

End Sub

In der Funktion neueAufgabe wird kein Ton produziert. Der Ton kommt erst danach. Habe ich beim Schritweisen-Debuggen herausgefunden. Danke auch noch mal für eure schnellen Antworten.

greetings
Cathryn
 
Kommt der Ton definitiv ausm Speaker ?

und kommt er auch wenn du die .exe ohne Entwicklungsumgebung startest ?
 
Zuletzt bearbeitet:
Komisch... willst du mal das komplette Projekt zum Testen irgendwie hochladen ?
 
Grundsätzlich ja, aber ich weiß nicht wie.
Wohin hochladen?
 
Problem erkannt...

das ist die Textbox die auf die Eingabe von Enter mit dem Geräusch reagiert... versuchs mal mit TAB oder so dann solltes weg sein
also bei dem Keydownevent
Code:
Private Sub txtLoesung_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtLoesung.KeyDown
If e.KeyValue = [B]Keys.TAB[/B] Then
If ergebnis.ToString = txtLoesung.Text Then
richtig += 1
If soundRichtig Then
My.Computer.Audio.Play(soundRichtigDatei, AudioPlayMode.WaitToComplete)
End If

Else
falsch += 1
If soundFalsch Then
My.Computer.Audio.Play(soundFalschDatei, AudioPlayMode.WaitToComplete)
End If
End If

txtRichtig.Text = richtig.ToString
txtFalsch.Text = falsch.ToString
txtLoesung.Text = ""
neueAufgabe()
End If
End Sub 'Hier kommt das Geräusch

oder stell mal testweise bei der TextBox Multiline auf True :)
 
Zuletzt bearbeitet:
Hallo Daniel,

es hat funktioniert. Vielen Dank für deine Hilfe.
Ich habe Multi-Line eingeschaltet und dann dass Ergebnis mit trim bearbeitete, damit
der Vergleich wieder geht. Die Taste ist weiterhin die enter-taste. Das ist für den benutzer am einfachsten und schnellsten. Dann kann man die ganze Zeit mit dem Ziffernblock arbeiten.

Die methode sieht jetzt so aus
Code:
 Private Sub txtLoesung_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtLoesung.KeyDown
        If e.KeyValue = Keys.Enter Then
            If ergebnis.ToString = txtLoesung.Text.ToString.Trim() Then
                richtig += 1
                If soundRichtig Then
                    My.Computer.Audio.Play(soundRichtigDatei, AudioPlayMode.WaitToComplete)
                End If

            Else
                falsch += 1
                If soundFalsch Then
                    My.Computer.Audio.Play(soundFalschDatei, AudioPlayMode.WaitToComplete)
                    listeFalscheAufgaben.Items.Add(aufgabe.ToString + ergebnis.ToString)
                End If
            End If

            txtRichtig.Text = richtig.ToString
            txtFalsch.Text = falsch.ToString

            neueAufgabe()
        End If
    End Sub


Viele Grüße
Cathryn
 
Zurück
Oben