Mon objectif est de permettre à l'utilisateur de cliquer sur un emplacement spécifique sur une carte pour ajouter un repère, puis de modifier le repère en cliquant sur son icône (changer son nom, le déplacer, etc). J'utilise un PictureBox pour afficher la carte, et en enregistrant l'événement MouseDoubleClick je dessine une image sur la carte avec la méthode GDI + DrawImage(). Le problème est qu'après que l'image du repère a été dessinée, elle n'est pas modifiable: l'utilisateur ne peut pas cliquer sur l'icône et la déplacer, changer son nom, etc. Y a-t-il d'autres modèles de design que je peux suivre? peut-être en utilisant d'autres contrôles ...?C#: Création d'un objet modifiable dans un PictureBox
Répondre
Vous devez avoir un concept de superposition des éléments. Lorsque vous placez cette icône sur l'image, vous devez stocker ses coordonnées/taille dans un tableau. Si l'utilisateur clique sur l'icône, vous pouvez détecter sa position en fonction des coordonnées stockées, puis autoriser l'utilisateur à la sélectionner/déplacer, en redessinant l'image en fonction de votre image d'arrière-plan principale + le tableau d'icônes en couches.
Vous pouvez avoir une liste d'objets dont chacun est un repère sur votre écran. ces objets ont au moins 2 propriétés X et Y et une méthode public bool Contain(int x, int y)
qui vous dit que cet objet contient ce point ou non.
public class placemark
{
public int X;
public int Y;
public bool Contain(int x, int y)
{
// some logic here
return true;
}
}
Lorsque l'utilisateur clique sur l'écran, par un contrôle de boucle foreach que chaque objet contient la position de la souris pour trouver l'objet que l'utilisateur veut sélectionner.
foreach(var placemark in placeMarkList)
{
if (placemark.Contain(e.x,e.y))
{
placemark.X+=e.x-oldx;
placemark.X+=e.y-oldy;
}
}
Vous pouvez donc modifier les propriétés X et Y de cet objet et Invalidate() PictureBox.
Vous m'avez perdu à "il ne peut pas être édité". Tout modifier nécessite du code. –