Я хотел, чтобы пользователь, работавший с моей программой па языке Visual Basic, мог выбрать один из нескольких элементов щелчком мыши на одном из пунктов меню. Я просмотрел отличную коллекцию программ-примеров и нашел тот, в котором пользователь мог выбирать один из восьми пунктов меню. Когда я посмотрел, какой код обеспечивал выбор одного из элементов меню, я ужаснулся:
sub menuitemO_click()
menuitemO checked = 1
menutieml.checked = 0
menuti em2 . checked = 0
menutiem3 checked = 0
menutiem4 checked = 0
menutiem5 checked = 0
menutiem6 checked = 0
menutiem7.checked = 0
Для второго элемента было написано то же самое, с небольшими изменениями:
sub menuiteml_c1iсk()
menuitemO checked = 0 merunteml checked = 1
И так далее для элементов 3-8. А всего на выбор одного из пунктов меню ушло около 100 строк кода.
Я и сам однажды наггисал подобного монстра, начав с двух пунктов меню, для которых подобная структура выглядела достаточно удобной. Потом я добавил тре- 1ий, четвертый и последующие элементы. Я был слишком увлечен тем, что делала моя программа, чтобы остановиться и исправить свою ошибку.
Если подумать немного, можно написать функцию, которая будет обнулять все поля. Первая функция при этом примет вид:
sub menui temO_cli с к С)
uncheckall /* сброс всех полей в 0 */ menuitemO checked = 1
Но нам все равно придется написать семь аналогичных функций.
К счастью, Visual Basic поддерживает использование массива пунктов меню. Поэтому восемь похожих друг на друга функций можно заменить одной:
sub menuitem_cl'ck(int choice) for i = [0. numchoices)
menutien[i] checked - 0 menutiem[choice] checked = 1
Объединение повторяющихся команд в одну функцию сокращает 100 строк кода до 25, а использование массивов сокращает количество строк до четырех. При этом добавлять новые пункты становится проще, а код становится абсолютно ясным и понятным — в нем сложно наделать ошибок. Такой подход дал мне возможность решить задачу, набрав несколько строк кода.
Опубликовал vovan666
April 16 2013 23:55:34 ·
0 Комментариев ·
3288 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.