![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Помогите написать расширяемую версию этого метода |
|
.NET - Помогите написать расширяемую версию этого метода
|
![]() Пользователь Сообщения: 69 |
Я кликаю мышкой в поле 500х500 пикселей. Это поле разделено на квадраты 10х10. Каждый квадрать по 50х50. Как узнать в какой я квадрат ткнул?
Кроме этого ничего придумать не смог: private int getCord(int x) { if (x > 0 & x < 50) x = 0; if (x > 50 & x < 100) x = 1; if (x > 100 & x < 150) x = 2; if (x > 150 & x < 200) x = 3; if (x > 200 & x < 250) x = 4; if (x > 250 & x < 300) x = 5; if (x > 300 & x < 350) x = 6; if (x > 350 & x < 400) x = 7; if (x > 400 & x < 450) x = 8; if (x > 450 & x < 500) x = 9; return x; } Но это идиотский код мне кажется. Если мне понадобиться сделать поле больше или меньше (например 550х550), то придется переписывать этот метод. Не говоря уже о том, что невозможно изменить размер поля из настроек программы. Подскажите что тут можно сделать? |
|
Отправлено: 19:00, 01-03-2011 |
Старожил Сообщения: 154
|
Профиль | Отправить PM | Цитировать почему идиотский.. вполне нормальный, правда я бы иф-элсы использовал.. для большего стиля так сказать, но вообще ничего другого тут не придумать.У тебя же эти квадраты не объекты чтобы вернуть какието значения а, как я понял, просто фоновый рисунок и все. Вот если бы они были объектами то это другое дело.
хотя мона так int ответ= (x - x%50)/50; но над еще проверить чтобы больше 500 мышка не выходила |
Последний раз редактировалось Beyound, 01-03-2011 в 21:01. Отправлено: 20:54, 01-03-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать В какой квадрат попадает x = 450?
Как немного сишник, могу посоветовать пользоваться округлением при делении нацело return max(0, min(9, x/50)) |
Отправлено: 21:02, 01-03-2011 | #3 |
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать Во первых, как правильно сказал pva, надо определиться с попаданием в точки кратные 50. А во вторых - использовать деление.
Возвращаемая координата есть, разделить ее нацело и все. И не надо никаких сравнений делать. Если от попадания в квадрат зависит более чем одна величина, то использовать выбор case или подобный. Я думаю в .NET должно быть нечто подобное. |
------- Отправлено: 21:24, 01-03-2011 | #4 |
Ветеран Сообщения: 3320
|
Профиль | Отправить 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 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать |
Отправлено: 07:08, 02-03-2011 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Помогите написать программу на С++ | rivz2007 | Программирование и базы данных | 4 | 05-09-2010 16:54 | |
Разное - Помогите написать код | FlatX007 | Программирование и базы данных | 1 | 23-05-2009 14:40 | |
C/C++ - Помогите определить версию Virnual c++. | Zh.Ron | Программирование и базы данных | 5 | 15-10-2008 12:58 | |
FreeBSD - Помогите написать скрипт | Stirs | Общий по FreeBSD | 2 | 25-06-2008 02:29 | |
Помогите написать скрипт!!! | Sergei Antoshkin | Вебмастеру | 1 | 13-03-2003 18:22 |
|