Hanoi in c#

giovedì 21 luglio 2005 - 14.52

kunio Profilo | Junior Member

Ciao a tutti,
devo realizzare un progetto che implementi il gioco della torre di Hanoi.
Ho problemi sull'interfaccia grafica.Devo riuscire a trascinare un'immagine da una Picture Box ad un'altra picture box.E' da un bel po che ci sbatto la testa ma non ne vengo a capo.
Per cortesia aiutatemi.

Brainkiller Profilo | Guru

Ciao Kunio,
mi sa che dovrai sbattere la testa ancora un po'. Le strade sono due. O sfruttare il Drag&Drop nativo offerto da .NET oppure devi implementarlo tu da zero usando GDI+ e forse altro.

Nel primo caso magari ti è utile creare un custom control ad hoc che rappresenti i vari anelli della Torre in modo che così puoi dopo trascinarlo senza scrivere ulteriori implementazioni del Drag&DRop.

ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

kunio Profilo | Junior Member

Grazie fess (che dalle mie parti vuol dire tanto),...continuerò a sbattermi,...spero cmq che se a quelcuno gli venga un idea su come poter risolvere il problema mi dia una mano.
Ciao ciao,...Microsoft mvp

kunio Profilo | Junior Member

Su un altro forum mi han suggerito la seguente soluzione.

il controllo PictureBox non ha la proprietà "AllowDrop", la quale impostata su "True" permette la gestione del "DragDrop", per sopperire a tale "mancanza" puoi incapsulare il controllo PictureBox all'interno di un controllo Panel (ed impostando la proprietà Dock del PictureBox su Fill in modo che il Panel venga "riempito" in automatico anche durante il resize). Per il codice d'esempio riportato è necessario inserire in una Windows Form due controlli PictureBox, rispettivamente PictureBox1 e PictureBox2, il secondo inserito all'interno di un controllo Panel (Panel1) come detto in precedenza. Lo scopo dell'esempio "trascinare" l'immagine dal controllo PictureBox1 al controllo PictureBox2 (naturalmente per il contrario è possibile eseguire la procedura a specchio), bando alle chiacchere ecco il codice:

private void Form1_Load(object sender, System.EventArgs e)
{
this.panel1.AllowDrop = true;
this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage ;
this.pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage ;
}

private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == MouseButtons.Left )
{
this.pictureBox1.DoDragDrop (this.pictureBox1.Image ,DragDropEffects.Copy );
}
}


private void panel1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
if(e.Data.GetDataPresent (System.Windows.Forms.DataFormats.Bitmap ))
{
e.Effect = System.Windows.Forms.DragDropEffects.Copy ;
}
}


private void panel1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
if(e.Data.GetDataPresent (System.Windows.Forms.DataFormats.Bitmap ))
{
this.pictureBox2.Image = this.pictureBox1.Image ;
this.pictureBox1.Image = null;
}
}

Questo esempio su come trasferire le immagini da due PictureBox non mi funziona... trovate qualche errore in ciò che mi hanno suggerito?





Brainkiller Profilo | Guru

Eh eh,
a questo punto dovresti chiedere a chi ti ha dato questo suggerimento :) Chiaramente l'AllowDrop consente di attivare il Drag&Drop nativo di .NET che era una delle due soluzioni che ti avevo indicato anche io.

Invece di farti dare una soluzione bella e pronta vai sull' SDK di .NET e leggiti questo capitolo "Drag-and-Drop Operations and Clipboard Support" dove trovera iimportanti informazioni.

Cmq. anche dalle mie parti si dice Fess, tu di dove sei ?

ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

kunio Profilo | Junior Member

Niente,...tutto apposto...ci son riuscito da solo.
Grazie lo stesso per l'interessamento e per i suggerimenti.

PS.Son della provincia di bergamo.

Brainkiller Profilo | Guru

Ah ecco, io Brescia, confino a 2 km. con Bergamo.

ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5