2009-09-05 7 views
1

Это своего рода .... вопрос из двух частей. Первый из них гораздо важнее второго, оба из них находятся в одном проекте и в vb.net.Rectangles & Parsing in vb.net

Как я могу ограничить границы объекта прямоугольника, который управляется мышью, поэтому его нельзя рисовать вне PictureBox? Это классное управление lasso, пользователь может щелкнуть и перетащить, и он вытащит ящик из начальной точки щелчка в текущее местоположение мыши. Исходная точка находится в (rectX, rectY), и поле рисуется в правом нижнем углу, используя rectDimX и rectDimY (чтобы установить ширину и высоту), чтобы увидеть, сколько изменений произошло с помощью мыши. В основном, это то, что вы получаете с помощью щелчка и перетаскиваете рабочий стол Windows. Проблема здесь в том, что прямоугольник можно рисовать за пределами PictureBox, на который он нарисован, а следующая часть кода пытается ссылаться на это местоположение, а затем сбой OutOfMemory. Это приводит меня к моему второму вопросу:

Как я могу сделать рисование прямоугольника более четвертого квадранта, который является только положительным числом? Если он идет в другом месте, он не отображает прямоугольник, хотя он все еще имеет правильные значения. Я знаю, что я мог бы кодировать это четыре раза в зависимости от исходного местоположения и местоположения мыши, но это было бы огромной проблемой и переписанием всего кода прямоугольника.

Есть ли простое решение для любого из них? Первый из них - гораздо большая проблема, так как это будет очень трудоемким, если нет простого способа.

Спасибо за помощь!

ответ

2

Для первой части вашего вопроса, даже если пользователь перетаскивает мышь за пределы поля вашего изображения, вам не нужно использовать эти координаты для вашей процедуры рисования. Просто сделайте что-нибудь вроде

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

И аналогично для Y-направления.

Что касается отрицательных чисел во время рисования, вы хотите перевести координаты экрана в координаты клиентской области. Посмотрите на ScreenToClient и ClientToScreen.

+0

Это отрицательные числа, которые являются проблемой, прямоугольник, когда слева или выше мыши имеет отрицательную высоту или ширину. Конечно, я мог бы просто установить его на абсолютную величину и перенести его ... что я действительно могу сделать. Вау, я удивляюсь, почему я не думал об этом до LOL! – Cyclone

+0

Обычно вы хотите «перевести» происхождение вашей мыши в начало вашего окна чертежа. Отредактировал свой ответ выше с информацией об этом (так как я сейчас понимаю эту часть) –

+0

Хм, я все еще смущен этим ... Можете ли вы привести пример синтаксиса для перевода окна чертежа в X и Y из PictureBox? – Cyclone