Frage zu C# in Visual Studio

Neue Frage »

Auf diesen Beitrag antworten »
kein_plan Frage zu C# in Visual Studio

Meine Frage:
Hallo.

Ich möchte mit Visual Studio das Labyrinth von dieser Anleitung(http://msdn.microsoft.com/de-de/library/vstudio/dd492162.aspx) ein bisschen erweitern (siehe Bild).
Am Anfang ist die Maus links oben. Die Zeit soll starten, wenn der Spieler die Maus über den schwarzen Strich bewegt. Dazu habe ich folgendes geschrieben:

code:
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:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Maze
{
    public partial class Form1 : Form
    {
        // This SoundPlayer plays a sound whenever the player hits a wall.
        System.Media.SoundPlayer startSoundPlayer = new System.Media.SoundPlayer(@"C:\Windows\Media\chord.wav");

        // This SoundPlayer plays a sound when the player finishes the game.
        System.Media.SoundPlayer finishSoundPlayer = new System.Media.SoundPlayer(@"C:\Windows\Media\tada.wav");

        int time, i=1;

        public Form1()
        {
            InitializeComponent();
            MoveToStart();
        }

        private void finishLabel_MouseEnter(object sender, EventArgs e)
        {
            // Play a sound, show a congratulatory MessageBox, then close the form.
            finishSoundPlayer.Play();
            MessageBox.Show("Herzlichen Glückwunsch!");
            Close();
        }

        /// <summary>
        /// Play a sound, then move the mouse pointer to a point 10 pixels down and to 
        /// the right of the starting point in the upper-left corner of the maze.
        /// </summary>
        private void MoveToStart()
        {
            startSoundPlayer.Play();
            Point startingPoint = panel1.Location;
            startingPoint.Offset(10, 10);
            Cursor.Position = PointToScreen(startingPoint);
        }

        private void wall_MouseEnter(object sender, EventArgs e)
        {
            // When the mouse pointer hits a wall or enters the panel,
            // call the MoveToStart() method.
            MoveToStart();
        }

        private void startTimer(object sender, EventArgs e)
        {
            if (i == 1)
            {
                time = 1;
                timeLabel.Text = "0 Sekunden";
                timer1.Start();
                i++;
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            timeLabel.Text = time + " Sekunden";
            time++;
        }
    }
}


Bei den Ereignissen steht dann bei dem schwarzen Strich bei MouseEnter: startTimer. Damit sollte die Zeit beginnen, zu zählen.

Bei den blauen Wänden (das sind alles Labels) steht bei MouseEnter: wall_MouseEnter.

Mein Problem ist jetzt, dass das nicht klappt, wenn ich die Maus über den schwarzen Strich bewege. Die Zeit fängt zwar an, zu zählen, aber gleichzeitig wird auch das ausgeführt, was bei wall_MouseEnter steht. Das passiert übrigens erst, wenn ich den schwarzen Strich mit der Maus wieder verlassen will, also nicht, wenn ich die Maus auf den schwarzen Strich drauf bewege.

Wie kann das denn sein? Ich habe doch wall_MouseEnter gar nicht aufgerufen, wenn ich die Maus über den schwarzen Strich bewege. Eigentlich müsste doch bei Mouse_Leave irgendwas stehen. Tut es aber nicht. Woran liegt das???

Meine Ideen:
 
Auf diesen Beitrag antworten »
eulerscheZahl

Also, bei mir funktioniert es so, wie es soll.
Hast du vielleicht dem Objekt nach der schwarzen Linie versehentlich auch das Event wall_MouseEnter zugewiesen?

Ansonsten kann ich dir anbieten, drüberzuschauen, wenn du das gesamte Projekt hochlädtst.
Auf diesen Beitrag antworten »
kein_plan

Kann man denn bei MouseEnter mehrere Funktionen auf einmal zuweisen? Ich dachte, da kann man immer nur eins machen. Jedenfalls steht da bei dem schwarzen Strich nur startTimer.

Hier ist das ganze Projekt:
Auf diesen Beitrag antworten »
eulerscheZahl

Ich hatte Recht mit meiner Vermutung:
bei panel1 hast du ein Event hinzugefügt, das da nicht hingehört.
 
Auf diesen Beitrag antworten »
kein_plan

OK, jetzt funktioniert es.

Jetzt ist auch schon mein nächstes Problem gelöst: Ich hatte noch eine andere Funktion MoveToStart2, bei der kein Ton abgespielt wird. Diese wird nur einmal am Programmanfang aufgerufen (statt MoveToStart mit Ton). Jetzt wurde aber trotzdem beim Programmanfang schon der Sound abgespielt. Das lag also auch daran, dass ich da versehentlich ein Event festgelegt habe beim Panel.

Vielen, vielen Dank für deine Hilfe!!! Gott
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »