Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  9 1257
har nå nylig startet å lære meg c# programering i visual studio.

har funnet en del gode tutorials og er godt på gang føler jeg.


har fulgt en tutorial nå til punkt å prikke men får det ikke til å fungere som det skal, får ingen feilmeldinger eller lignende.


lager nå et enkelt Maze spill som man skal føre musepekeren igjennom en labyrint.

Kode

       

private void MoveToStart()
        {
            Point startingPoint = panel1.Location;
            startingPoint.Offset(10, 10);
            Cursor.Position = PointToScreen(startingPoint);
        }

        private void wall_MouseEnter(object sender, EventArgs e)
        {
            MoveToStart();
            MessageBox.Show("Smakk");
        }

når jeg beveger musen over veggen (wall_MouseEnter) så kommer messageboxen opp men MoveToStart(); fungerer ikke i det heletatt.

denne skulle beveget musa til et fast punkt også når programmet starter som den ikke gjør.

kan dette ha noe å gjøre med at jeg utviker i et virituellt miljø? (winXP i vmware)

eller er det jeg som har surra det opp max her?


takker for svar, har jeg glemt å informere om noe si gjerne ifra
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Kan det være at du trenger startingPoint = startingPoint.Offset(...)? Sjekk hva funksjoner/metoder returnerer.
liker bass
Trådstarter
da kommer det rød linje under: startingPoint.Offset(15, 15);

med error: Cannot implicitly convert type 'void' to 'System.Drawing.Point'

Beklager at jeg er litt noob, men hvordan Sjekker jeg hva som returneres?

takker for raskt svar
Kunne du postet tutotiralen?
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Vel, du kan sjekke om koden i MoveToStart kjører i det hele tatt; marker den første linjen i metoden og trykk F9. Linja blir nå rød, dette kalles et Breakpoint. Her vil programmet stoppe opp. Hvis denne ikke blir kalt, vet du at problemet ligger utenfor linjen. Om det blir kalt, kan du nå inspisere alt av variabler i koden som de er akkurat nå.

I "debug mode" kan du steppe gjennom koden linje for linje (statement for statement) ved hjelp av F10 og F11, toggle breakpoint (og sette nye) med F9, fortsette med F5 eller avslutte hele programmet.

Edit: oops, glemte det. Siden messageboxen vises, blir også metoden kalt, i hvert fall. Dette er nyttig uansett, så jeg lar det stå. Kan ikke se noen umiddelbar grunn til at det ikke skal fungere... Glem forresten det jeg sa om =, Offset forandrer instansen du kaller den på, og returnerer ingenting (void). Jeg trodde den kanskje returnerte den modifiserte instansen.
Sist endret av robhol; 21. november 2012 kl. 15:16.
Jeg prøvde å lage en lignende kode nå, og den fungerte som den skal.
Sikker på at du ikke har gjort en feil et annet sted?

Kode

using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            RepositionCursor();
            MessageBox.Show("Smakk");
        }

        private void RepositionCursor()
        {
            Point StartingPoint = panel1.Location;
            StartingPoint.Offset(10, 10);
            Cursor.Position = PointToScreen(StartingPoint);
        }
    }
}
Har du sjekket kommentarene under tutorial-en?

I had a bit of trouble getting MoveToStart() to work on my machine, then discovered that the mouse integration on my VM didn't allow the pointer to be repositioned.

If you can't get MoveToStart() to work and you're virtualising windows, check your VM settings for capturing the mouse.
Vis hele sitatet...
Har du husket å inkludere MoveToStart her?

Kode

namespace Maze
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
	        MoveToStart();
        }

        private void finishLabel_MouseEnter(object sender, EventArgs e)
        {
            // Show a congratulatory MessageBox, then close the form.
            MessageBox.Show("Congratulations!");
            Close();
        }

        /// <summary>
        /// Move the 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()
        {
            Point startingPoint = panel1.Location;
            startingPoint.Offset(10, 10);
            Cursor.Position = PointToScreen(startingPoint);
        }
    }
}
Sitat av skepsis Vis innlegg
da kommer det rød linje under: startingPoint.Offset(15, 15);

med error: Cannot implicitly convert type 'void' to 'System.Drawing.Point'

Beklager at jeg er litt noob, men hvordan Sjekker jeg hva som returneres?

takker for raskt svar
Vis hele sitatet...
Du får det opp i Visual Studio, men det greieste er nok å lære seg å lese API med en gang. Hvis du søker opp metoden Point.Offset(int32, int32), kan du se at ikke finnes noen return value, som det eksempelvis gjør her. Med andre ord vil intellisens gi deg rødt fordi du prøver å sette en verdi ved å kalle en metode som ikke returner noe. Også deklarert som "void".

Bruk noen timer på å lære deg debugging. Det kommer til å gi deg et ubeskrivelig utbytte i fremtiden å kunne steppe gjennom koden steg for steg. Utnytt Visual Studio til at det er verdt!
liker bass
Trådstarter
robhol: takker for det, veldig kjekk måte å debugge på må jeg si

Bronsky: har lest litt der, men så ikke den gitt!, googla meg til at jeg måtte avinstallere vmware musedriveren så fungerte det! takker for alle svar

tråden kan stenges nå