Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Frage zu C# in Visual Studio » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Frage zu C# in Visual Studio
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
kein_plan
unregistriert
Frage zu C# in Visual Studio Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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:

kein_plan hat dieses Bild (verkleinerte Version) angehängt:
Maze.png

29.04.2013 16:56
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)
29.04.2013 19:50 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
kein_plan
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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:

Dateianhang:
zip Maze.zip (62 KB, 388 mal heruntergeladen)
30.04.2013 12:02
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Syntax Highlighting fürs Board (Link)
30.04.2013 13:04 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
kein_plan
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
30.04.2013 16:20
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Frage zu C# in Visual Studio