Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C#] Mouse Move *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Momenteel heb ik volgend programma werkende met de hulp van jullie :

[code=c#]

private void btn_transfo_Click(object sender, EventArgs e)
{
teller_transfo += 1;
PictureBox transfo = new PictureBox();
Controls.Add(transfo);
transfo.Name = "pic" + teller_transfo;
Point pos1 = Control.MousePosition;
transfo.Location = pos1;
transfo.Location = new Point(this.positie1.X + 900, this.positie1.Y+100);
transfo.ClientSize = new Size(50, 50);
transfo.SizeMode = PictureBoxSizeMode.StretchImage;
transfo.MouseDown += new MouseEventHandler(transfo_MouseDown);
transfo.MouseUp += new MouseEventHandler(transfo_MouseUp);
transfo.MouseMove += new MouseEventHandler(transfo_Mousemove);
transfo.MouseDoubleClick += new MouseEventHandler(picbox_MouseDoubleClick);
try
{
transfo.Image = Image.FromFile(@"c:\pic\transfo.jpg");
}
catch (Exception error)
{
MessageBox.Show(error.Message, "Cannot find pic", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

void transfo_Mousemove(object sender, MouseEventArgs e)
{
PictureBox x = (PictureBox)sender;
if (x.Tag != null && (bool)x.Tag)
{
Point current_pos = Control.MousePosition;
x.Location = current_pos;
}
}

void transfo_MouseUp(object sender, MouseEventArgs e)
{
((Control)sender).Tag = false;

}

void transfo_MouseDown(object sender, MouseEventArgs e)
{

((Control)sender).Tag = true;


}




[/code=c#]

Wat doet het: Je klikt op de button transfo, op een bepaalde locatie wordt er een picturebox geplaatst, welke je erna kan verslepen.

Ik ben aan het zoeken om volgend te realiseren:
Als ik op de knop transfo klik, zou de picturebox aan de muis moeten hangen , en neerdroppen waar ik wil.

Wat heb ik al geprobeerd:

- Ervoor te zorgen dat de tag automatisch true wordt wanneer ik op de knop transfo klik
-De code van de mousemove bij de button gezet
- wat variabelen bijgeduwd en wat if then else statements


Ik geraak er niet aan uit, iemand die mij in de richting kan duwen?

*EDIT*
Ben in de header [C#] vergeten, mijn excuses!
Dit kan niet aangepast worden blijkbaar in edit mode?

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 22:06
Als je de onmousedown, mousedrag en mouseup events kunt afvangen zoals in java kun je hier in ieder geval het volgende proberen

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  onMouseUp()
  { 
    /*  remove picturebox from mousepointer aka destroy local object..
  }

  onMouseDrag()
  {
    /* set picturebox x / y coords to the mousepointer x / y
  }

  onMouseDown()
  {
 /*  set picturebox on mouse coordinates
   
  }

[ Voor 11% gewijzigd door Webgnome op 15-02-2008 11:35 . Reden: onmousedown / up omgedraaid. Je wilt natuurlijk eerst de picturebox slepen en als je de knop los laat plas ergens neer plempen ]

Strava | AP | IP | AW


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Volgens mij is het probleem dat de click van de button pas afgaat nadat het mouseup event heeft plaatsgevonden. Dus je kunt niet "draggen" zoals dat normaal gaat, door je muisknop ingedrukt te houden en dan te "droppen". Klopt mijn conclusie?

Ik vrees dat je dit niet makkelijk kan oplossen, tenzij je van de gebruiker verwacht dat hij nog eens klikt om de picturebox te droppen. Dit zou je bijvoorbeeld met een state variabele die door Mosue Move kan worden gebruikt om te bepalen of hij de picturebox aan de mouspointer moet hangen of niet. Bij het mouseup event (of click event) kun je de state aanpassen, de picturebox op de coordinaten van dat moment droppen. Het mousemove event stopt vanwege de state met het tonen van de picturebox bij de cursor.

Verwijderd

Topicstarter
bigbeng schreef op vrijdag 15 februari 2008 @ 11:30:
Volgens mij is het probleem dat de click van de button pas afgaat nadat het mouseup event heeft plaatsgevonden. Dus je kunt niet "draggen" zoals dat normaal gaat, door je muisknop ingedrukt te houden en dan te "droppen". Klopt mijn conclusie?
Ik zal het nog een beetje verduidelijken:
Na het klikken van de button wordt de picbox aangemaakt en gepositioneerd op het form.
Om de picbox te verplaatsen moet je op de picbox klikken en de muisknop ingedrukt houden.Zolang je de muisknop inhoudt kan je slepen. Laat je de muisknop los , zal de picbox op de positie van de cursus worden losgelaten.
Ik vrees dat je dit niet makkelijk kan oplossen, tenzij je van de gebruiker verwacht dat hij nog eens klikt om de picturebox te droppen. Dit zou je bijvoorbeeld met een state variabele die door Mosue Move kan worden gebruikt om te bepalen of hij de picturebox aan de mouspointer moet hangen of niet. Bij het mouseup event (of click event) kun je de state aanpassen, de picturebox op de coordinaten van dat moment droppen. Het mousemove event stopt vanwege de state met het tonen van de picturebox bij de cursor.
Sorry maar hier kan ik even niet volgen.

  • Spiral
  • Registratie: December 2005
  • Niet online
Zo werkt het prima.
En zet in je Form AllowDrop op True
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            Label l = (Label)e.Data.GetData(typeof(Label));
            l.Location = this.PointToClient(new Point(e.X, e.Y));
        }

        private void button1_MouseDown(object sender, MouseEventArgs e)
        {
            Label l = new Label();
            l.Text = "transploft";
            l.Location = e.Location;
            l.AutoSize = true;
            this.Controls.Add(l);
            this.DoDragDrop(l, DragDropEffects.Move);
        }

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

[ Voor 6% gewijzigd door Spiral op 15-02-2008 12:43 . Reden: Toevoeging AllowDrop ]

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


  • hankleppe
  • Registratie: Juni 2004
  • Laatst online: 06-06-2024
Spiral schreef op vrijdag 15 februari 2008 @ 12:41:
Zo werkt het prima.
En zet in je Form AllowDrop op True
C#:
1
2
3
      (...)
            l.Text = "transploft";
      (...)
:')

<Terw_Dan> taskbar boven is beter
vreet minder cpu power :P
komt doordat de zwaartekracht dan het werk doet ipv je cpu
als je dan op start drukt valt het menu gewoon naar beneden :P
anders moet hij het helemaal omhoogduwen


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Verwijderd schreef op vrijdag 15 februari 2008 @ 12:25:


[...]


Sorry maar hier kan ik even niet volgen.
Ik bouwde voort op mijn aannames, die dus fout waren, dus ik kan mij voorstellen dat het lastig te volgen is.

Het verhaal dat je vertelt begint eigenlijk pas bij het op de picturebox klikken om te draggen. De rest is achtergrond.

Verwijderd

Topicstarter
Bedankt!

Deze code is een stuk korter en simpeler dan mijn vorige code die dan nog maar voor de helft werkt :)


Het is voor een student elektriciteit niet makkelijk om een c# project tot een goed einde te brengen.
Ik doe mijn best, heb al heel veel geleerd, maar ik merk toch dat ik te weinig basiskennis heb.

Ik zoek veel op internet, maar ik heb redelijk veel problemen om halve of pseudo code om te zetten naar correcte c# taal.

Verwijderd

Topicstarter
Maar nu het volgende probleem.. Ik zou de geplaatste objecten willen verplaatsen 8)

Ik heb mijn mouseevents uit de eerste code wat ik had gepost ingevoegd in de code die jij had gegeven. Er zijn geen errors, maar ik kan de geplaatste objecten niet verplaatsen.

Mijn andere events zoals dubbel klik etc werken dan weer wel..

Wat zie ik over het hoofd?

[ Voor 10% gewijzigd door Verwijderd op 15-02-2008 13:30 ]


Verwijderd

Topicstarter
Ik heb de fout al gevonden, excuseer.


Lange tijden achter de PC zitten zonder pauze doet een mens niet goed 8)7

Verwijderd

Topicstarter
Als ik een picbox versleep of een nieuwe drag & drop, staat de cursor links boven van de picturebox. Hoe zou ik deze in het midden kunnen krijgen?
Stel dat mijn picboxen 50 op 50 zijn, dan zou mijn nieuwe mouse positie (+25,-25) moeten zijn, maar dit nu nog vertalen naar juiste c code :)

Iemand een idee?

[ Voor 72% gewijzigd door Verwijderd op 18-02-2008 11:30 . Reden: wat uitleg bij de vraag bijgevoegd ]

Pagina: 1