Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


amohax, когда столкнулся с подобной задачей (на VB.NET) использовал следующую технику.
Завёл две переменные, ширину и высоту прямоугольника (для квадрата можно одну), как поля класса. В конструкторе получал их размер в зависимости от требуемого поля (делил размеры клиентской области). А в обработчике клика пробегался по прямоугольникам (квадратам).
Код: Выделить весь код
Class Form1
    Inherits Form
    Dim i As Byte = 0
    Dim apt(1) As Point
    Dim dX, dY As Integer
'...
    Sub New()
        dX = Me.ClientSize.Width / 5
        dY = Me.ClientSize.Height / 5
    End Sub
    Protected Overrides Sub OnMouseClick(ByVal mea As MouseEventArgs)
'...
            For iD As Integer = 0 To Me.ClientSize.Width Step dX
                If (iD <= mea.Location.X) And (mea.Location.X < iD + dX) Then
                    apt(i).X = iD + dX / 2
                    iD = Me.ClientSize.Width 'break
                End If
            Next iD

            For iD As Integer = 0 To Me.ClientSize.Height Step dY
                If (iD <= mea.Location.Y) And (mea.Location.Y < iD + dY) Then
                    apt(i).Y = iD + dY / 2
                    iD = Me.ClientSize.Height 'break
                End If
            Next iD
'...
        End If
    End Sub
'...
End Class
В приведённом коде нету округлений (значения целые, так как величины в полпикселя не бывает), однако они рекомендованы для случаёв с малыми квадратами. Да и границы квадратов нужно включать.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:46, 01-03-2011 | #5