![]() |
Помогите написать расширяемую версию этого метода
Я кликаю мышкой в поле 500х500 пикселей. Это поле разделено на квадраты 10х10. Каждый квадрать по 50х50. Как узнать в какой я квадрат ткнул?
Кроме этого ничего придумать не смог: Код:
private int getCord(int x) Но это идиотский код мне кажется. Если мне понадобиться сделать поле больше или меньше (например 550х550), то придется переписывать этот метод. Не говоря уже о том, что невозможно изменить размер поля из настроек программы. Подскажите что тут можно сделать? |
почему идиотский.. вполне нормальный, правда я бы иф-элсы использовал.. для большего стиля так сказать, но вообще ничего другого тут не придумать.У тебя же эти квадраты не объекты чтобы вернуть какието значения а, как я понял, просто фоновый рисунок и все. Вот если бы они были объектами то это другое дело.
хотя мона так int ответ= (x - x%50)/50; но над еще проверить чтобы больше 500 мышка не выходила |
В какой квадрат попадает x = 450?
Как немного сишник, могу посоветовать пользоваться округлением при делении нацело return max(0, min(9, x/50)) |
Во первых, как правильно сказал pva, надо определиться с попаданием в точки кратные 50. А во вторых - использовать деление.
Возвращаемая координата есть, разделить ее нацело и все. И не надо никаких сравнений делать. Если от попадания в квадрат зависит более чем одна величина, то использовать выбор case или подобный. Я думаю в .NET должно быть нечто подобное. |
amohax, когда столкнулся с подобной задачей (на VB.NET) использовал следующую технику.
Завёл две переменные, ширину и высоту прямоугольника (для квадрата можно одну), как поля класса. В конструкторе получал их размер в зависимости от требуемого поля (делил размеры клиентской области). А в обработчике клика пробегался по прямоугольникам (квадратам). Код:
Class Form1 |
Спасибо за ответы!
Деление это то что нужно. Сам никак не мог найти что на что делить. Оказалось надо делить полученную координату на ширину квадрата, вот такой код получился: Код:
private int getCord(int x) |
Время: 13:03. |
Время: 13:03.
© OSzone.net 2001-