2010-06-14 11 views
1

J'ai un formulaire avec un panneau ancré dedans. Je crée ensuite dynamiquement 15 panneaux (nommés: panel_n) et 15 cadres d'image (nommés: picturebox_n) sur le panneau principal (appelé ContainerPanel).Problème de contrôles généré dynamiquement

Lorsque vous faites glisser une image quelconque sur un panneau (panel_n) créé à l'aide des événements de souris appropriés. Je voudrais obtenir le nom du panneau que la boîte à images a été traînée. Le curseur de la souris semble être capturé.

J'ai essayé de créer une interface IMessageFilter, mais aucun événement ne se déclenche lorsque vous faites glisser l'une des images sur l'un des panneaux.

La fonction ClientRectangle.IntersectsWith ne fonctionne pas non plus car les coordonnées sont toujours 0,0.

Tout ce que je besoin est le nom du panneau où le picturebox a été traîné sur (de préférence sur l'événement mouseup)

Répondre

1

Si vous donnez les PictureBoxes un événement OnMouseDown qui dit quelque chose comme ceci:

(sender as PictureBox).DoDragDrop(sender, DragDropEffects.Copy); 

Ensuite, vous pouvez définir les panneaux propriété de AllowDrop true, et dans leur cas OnDragDrop, vous pouvez obtenir leur nom comme celui-ci:

string myName = (sender as Panel).Name; 

Edit: Aussi, vous devez donner les panneaux d'un événement comme celui-ci OnDragEnter:

e.Effect = DragDropEffects.Copy; 

Bien sûr, vous pouvez changer Copy à Move ou Link ou tout ce qui est approprié pour ce que vous faites. Cela change simplement l'icône du pointeur de la souris utilisée.

+0

Merci. Je ne peux pas sembler obtenir votre suggestion de travail J'ai ajouté ce qui suit au contrôle Pic que je crée sur l'événement mousedown. pb.DoDragDrop (expéditeur, DragDropEffects.Copy); J'ai également ajouté l'événement suivant à mes panneaux ctl.DragDrop + = new DragEventHandler (ctl_DragDrop); est ici la fonction d'événement vide ctl_DragDrop privé (expéditeur d'objet, DragEventArgs e) { chaîne myName = (expéditeur Panel) .Nom; MessageBox.Show ("Glissé vers Panel:" + myName); } // vide privé ctl_DragDrop (expéditeur d'objet, DragEventArgs e) Lorsque je fais glisser n'importe quel pciturebox, il affiche un curseur de souris "sans entrée". – Thomas

+0

J'ai également ajouté le PanelBeat [i] .AllowDrop = true; sur mes panneaux générés dynamiquement – Thomas

+0

@Thomas désolé, manqué un peu de code. Edited ma réponse. Btw, la prochaine fois que vous devriez modifier votre question pour ajouter des choses comme le commentaire ci-dessus - beaucoup plus facile à lire le code quand il est formaté :) – Blorgbeard