Center point

giovedì 22 gennaio 2009 - 15.27

toniovigi Profilo | Expert

Ciao ragazzi,vorrei fare questa cosa se è possibile

praticamente quando clicco con il mouse su un punto della form vorrei che quel punto diventasse il punto centrale e la form s sposterebbe,slitterebbe in modo automatico rispetto quel punto,non so se mi spiego

Esiste un modo per fare cio?

Grazie Antonio

aiedail92 Profilo | Expert

Ciao

Mi pareva di ricordare che ci fosse un articolo su DotNetHell, ma non sono riuscito a trovarlo... Comunque non è difficile, ti basta gestire l'evento MouseDown per scoprire quale è il punto base (quello dove clicki) e poi l'evento MouseMove per spostare la Form ad ogni movimento. Il risultato è una cosa di questo genere:

private Point offset; private void tuaForm_MouseDown(object sender, MouseEventArgs e) { offset = new Point(-e.X, -e.Y); } private void tuaForm_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Point mousePos = Control.MousePosition; mousePos.Offset(offset.X, offset.Y); this.Location = mousePos; } }

Luca

toniovigi Profilo | Expert

si hai risolto a metà,nel senso ok io clicco ma il form deve rimanere fermo,deve spostarsi il suo contenuto rispetto al punto dove clicco!:)

Grazie tante x l'aiuto

Jeremy Profilo | Guru

Fai 2+2 ...e col codice che ti ha passato sposti quello che vuoi...

Ciao....

toniovigi Profilo | Expert

codice???

aiedail92 Profilo | Expert

Quindi quello che vuoi muovere sono i sottocontrolli della form, non la form stessa...

Il codice resta comunque molto simile:

private Point offset; private void tuaForm_MouseDown(object sender, MouseEventArgs e) { offset = new Point(-e.X, -e.Y); } private void tuaForm_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { //Calcola la differenza fra la posizione corrente e quella precedente Point diff = e.Location; diff.Offset(offset); foreach (Control child in Controls) { //Ottiene la nuova posizione per il controllo Point childPos = child.Location; childPos.Offset(diff); child.Location = childPos; } //Imposta la nuova posizione di riferimento offset = new Point(-e.X, -e.Y); } }

Luca

Jeremy Profilo | Guru

Adesso non ho tempo....però fine settimana di posso dare qualche indicazione in più......

Però...guarda che con un pò di fantasia...ce la puoi fare!!!

Basta che al posto di This...ci metti i tuoi oggetti(magari con un ciclo For Each....Next sulla collections Controls del Form)

Comunque se non hai fretta.....


Ciao.....

toniovigi Profilo | Expert

no pensavo che mi avessi allegato del codice xke m hai scritto

Fai 2+2 ...e col codice che ti ha passato sposti quello che vuoi...

Ciao....


per quello

toniovigi Profilo | Expert

ottimo ottimo

e giusto unica accortezza, se no fa nulla!praticamente quello che ce dentro nn s deve muovere, deve slittare rispetto al punto k io clicco

io clicco nella posizione xx,yy il form prende quel punto xx,yy come centro e mi sposta tutto quell k cè dentro rispetto ql punto,

cmq il funziomamneto che mi hai dato prima dovrebbe essere simile

Jeremy Profilo | Guru

No problem.....spero tu non l'abbia preso come offesa(lungi da me....)
Anche se aiedail ti ha passato il codice,..il mio consiglio rimane sempre lo stesso....piuttosto chiedi informazioni....non il codice...se il codice lo scrivi da solo, è meglio.

Ciao...

aiedail92 Profilo | Expert

Ciao

Non ho capito esattamente cosa intendi con "slittare"...

Luca

toniovigi Profilo | Expert

slittare nel senso che il contenuto del form si sposta,quella che è la cornice rimane ferma,quello che ho dentro in base a dove clicco si sposta, il punto e che io nn devo trascinare,ma, in base a dove clicco il form s deve spostare da solo prendendo quel punto cliccato come centro posizione,un po come nei gioki di ruolo se hai presente , se clicci in una posizione si sposta lo schermo prenedndo come centro quella posizione

aiedail92 Profilo | Expert

Ciao

Usando il codice che ti ho passato in precedenza, puoi ottenere l'effetto che desideri. Basta, invece dell'evento MouseMove, usare il MouseClick, e quindi effettuare lo spostamento con una procedura del tutto simile.

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5