2013-04-14 18 views
6

Sto lavorando in Visual Studio 2012 con C# e devo trascinare una casella immagine in un'altra casella immagine, in pratica sostituire l'immagine Picturebox di destinazione con l'immagine della casella Immagine trascinata.C# Trascina e trascina da una casella immagine a un'altra

Come posso fare?

Si prega di essere specifici e cercare di spiegare il più semplice e il migliore possibile. Sono estremamente nuovo alla programmazione e un po 'disperato, quindi per favore sii paziente con me.

+0

Possibile duplicato di: http://stackoverflow.com/questions/1935925/drag-drop-of-a-dinamically-created-shortcut?rq=1 –

risposta

1

È possibile utilizzare il mouse per entrare e uscire dagli eventi per farlo facilmente .. Ad esempio, si dispone di due finestre di immagine pictureBox1 e pictureBox2 ... E si desidera trascinare l'immagine dalla casella di immagine1 e rilasciarla nella finestra di immagine2 fare qualcosa come questo ...

private void pictureBox2_MouseUp(object sender, MouseEventArgs e) 
    { 
     if (a == 1) 
     { 
      pictureBox1.Image = pictureBox2.Image; 
      a = 0; 
     } 
    } 

    private void pictureBox1_MouseEnter(object sender, EventArgs e) 
    { 
     a = 1; 
    } 

dove 'a' è solo un blocco o una chiave che controlla se il mouse è entrato il controllo su cui vogliamo far cadere questa immagine su ... spero che helped..worked per me

10

Il trascinamento + rilascio è nascosto sul controllo PictureBox. Non so perché, funziona bene. La guida probabile qui è che non sarà ovvio all'utente che potresti rilasciare un'immagine sul controllo. Dovrai fare qualcosa al riguardo, almeno impostare la proprietà BackColor su un valore non predefinito in modo che l'utente possa vederlo.

Anyhoo, avrete bisogno di implementare l'evento MouseDown sul primo picturebox modo è possibile fare clic e iniziare a trascinare:

private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { 
     var img = pictureBox1.Image; 
     if (img == null) return; 
     if (DoDragDrop(img, DragDropEffects.Move) == DragDropEffects.Move) { 
      pictureBox1.Image = null; 
     } 
    } 

ho pensato che si voleva spostare l'immagine, modificare, se necessario, se la copia è stata previsto. Quindi dovrai implementare gli eventi DragEnter e DragDrop sulla seconda picturebox. Poiché le proprietà sono nascoste, devi impostarle nel costruttore del modulo. In questo modo:

public Form1() { 
     InitializeComponent(); 
     pictureBox1.MouseDown += pictureBox1_MouseDown; 
     pictureBox2.AllowDrop = true; 
     pictureBox2.DragEnter += pictureBox2_DragEnter; 
     pictureBox2.DragDrop += pictureBox2_DragDrop; 
    } 

    void pictureBox2_DragEnter(object sender, DragEventArgs e) { 
     if (e.Data.GetDataPresent(DataFormats.Bitmap)) 
      e.Effect = DragDropEffects.Move; 
    } 

    void pictureBox2_DragDrop(object sender, DragEventArgs e) { 
     var bmp = (Bitmap)e.Data.GetData(DataFormats.Bitmap); 
     pictureBox2.Image = bmp; 
    } 

Ciò consente di trascinare un'immagine da un'altra applicazione nella casella. Chiamiamolo una caratteristica. Utilizzare un flag bool se si desidera disabilitare questo.

+0

if (img == null) return; cosa fa il ritorno in questa linea? Mi spiace, è praticamente la prima volta che programmo – user2250165

+0

Arresta il codice da arresto anomalo quando l'utente fa clic su una casella di immagine che non ha un'immagine. –

+0

ok ok grazie mille ho ancora un paio di domande. InitializeComponent(); - che cosa fa e perché usi il segno + = invece del solo segno =? – user2250165