2009-09-05 10 views
1

C'est un peu .... une question en deux parties. Le premier est beaucoup plus important que le second, les deux sont dans le même projet, et dans vb.net.Rectangles & Parsing dans vb.net

Comment est-ce que je peux contraindre les limites d'un objet de rectangle, qui est commandé par une souris, ainsi il ne peut pas être dessiné en dehors d'un PictureBox? Il s'agit d'un contrôle lasso standard, l'utilisateur peut cliquer et faire glisser et il va dessiner une boîte à partir du point de clic initial à l'emplacement actuel de la souris. Le point de départ est à (rectX, rectY), et la boîte est dessinée en bas à droite en utilisant rectDimX et rectDimY (pour définir la largeur et la hauteur) pour voir à quel point une modification est survenue avec la souris. Fondamentalement, c'est ce que vous obtenez avec un clic et faites glisser sur un bureau Windows. Le problème ici est que le rectangle peut être dessiné en dehors du PictureBox sur lequel il est dessiné, et la partie suivante du code tente de référencer cet emplacement, puis échoue avec une exception OutOfMemory. Ceci m'amène à ma deuxième question:

Comment faire pour que le rectangle dessine plus que le quatrième quadrant, qui est seulement des nombres positifs? S'il va ailleurs, il ne montre pas le rectangle, bien qu'il ait toujours les bonnes valeurs. Je sais que je pourrais coder ceci quatre fois en fonction de l'emplacement de départ et de l'emplacement de la souris, mais ce serait un gros problème et une réécriture du code rectangle entier.

Existe-t-il une solution facile pour l'un ou l'autre? Le premier est un tracas beaucoup plus gros, car il prendra beaucoup de temps s'il n'y a pas de moyen facile.

Merci pour l'aide!

Répondre

2

Pour la première partie de votre question, même si l'utilisateur fait glisser la souris au-delà du bord de votre bloc d'image, vous n'avez pas besoin d'utiliser ces coordonnées pour votre routine de dessin. Il suffit de faire quelque chose comme

If (DrawingPoint.X > PictureBox.Right) 
    DrawingPoint.X = PictureBox.Right // Right-hand limit of picture box 
End If 

Et similaire pour la direction Y. En ce qui concerne les nombres négatifs lors du dessin, vous souhaitez traduire les coordonnées de l'écran en coordonnées de la zone client. Jetez un oeil à ScreenToClient et ClientToScreen.

+0

Ce sont les nombres négatifs qui posent problème, le rectangle, quand à gauche ou au-dessus de la souris, a une hauteur ou une largeur négative. Bien sûr, je pourrais juste le mettre à la valeur absolue et le déplacer ... ce que je peux réellement faire. Wow, je me demande pourquoi je n'ai pas pensé à ça avant lol! – Cyclone

+0

Généralement vous voulez "traduire" l'origine de votre souris à l'origine de votre fenêtre de dessin. Edited ma réponse ci-dessus avec des informations à ce sujet (puisque je comprends cette partie maintenant) –

+0

Hmm, je suis encore confus à ce sujet ... pouvez-vous donner un exemple de syntaxe pour traduire la fenêtre de dessin aux X et Y de la PictureBox? – Cyclone