Модераторы: Akina

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Вывод имени контрола в MsgBox, Подскажите, пожалуйста :) 
:(
    Опции темы
АлексейМ
  Дата 29.8.2005, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Народ!
У меня проблемка. При клике по контролу формы (прямоугольнику!) надо вывести в MessageBox его имя. Но функция, которую я намалякал, выводит имя активного объекта, а не того, по которому кликаю. smile Я думал, что можно каким-то образом при том же клике этот контрол активировать, и тогда бы вывелось его имя... Но выяснилось, что я не представляю, как можно активировать прямоугольник.

Подскажите, плиз, как из этого выпутаться smile
PM MAIL   Вверх
Akina
Дата 29.8.2005, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Событие OnClick происходит абстрактно в приложении, и нельзя определить где именно (косвенно - по смещению фокуса, но не все контролы его получают).
В то же время события OnMouseDown, OnMouseUp, etc. получают в качестве параметров координаты события в окне приложения (внимательно следить за ед. изм.!). Следовательно, перебрав все контролы и сравнив, можно выяснить, в тело какого контрола попадает клик. Возможно, следует учитывать также Hidden.
Трудности возникнут, если есть несколько видимых контролов один над другим. Или, скажем, с закладками. Как вывернуться тут - пока не знаю... впрочем взаимное расположение контролов известно на стадии дизайна, а если оно потом программно изменяется - это можно отслеживать.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Papirus
Дата 29.8.2005, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Событие Click здесь наступает (если речь о прямоугольнике) в случае щелчка по линии границы. Это надо?
Тогда все просто - пишем свой код в процедуре обработки события:
Код

Private Sub Прямоугольник0_Click()
MsgBox "Прямоугольник0"
End Sub


Если надо во всей области прямоугольника, то не знаю, что и посоветовать. Попробуй вместо прямоугольника использовать Label соответственно оформленный.
PM MAIL ICQ   Вверх
АлексейМ
Дата 29.8.2005, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Большое спасибо! smile


Ещё вопросик. Почти по этой же теме.

Вот смотрите. У меня два контрола. При клике по одному из них должно определяться его имя и помещаться в функцию. Например, чтобы при клике по нему выводилось сообщение с его именем (но вообще для разных целей, конечно). Для чего я это спрашиваю? Просто представьте, что этих контролов штук 50, или тыща - и для каждого прописывать функцию. Это ведь ужасно! А если имя будет определяться и помещаться в функцию, то хватит и её одной - она просто станет универсальной smile

Подскажите, пожалуйста.
Наверное, не только мне это интересно. smile
PM MAIL   Вверх
Akina
Дата 29.8.2005, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Дело в том, что невозможно понять пока ЦЕЛЬ всей этой заморочки. Не локальную маленькую по получению имени контрола, а за нафига это потребовалось...
Озвучь. Вдруг окажется, что задача имеет иное решение? ведь не свою среду визуального построения макетов поди пишешь...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
АлексейМ
Дата 29.8.2005, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Да это во многом пригодится может smile
Мне бы пока решение этой задачки, если можно.

Всё дело в том, что для решения моей проблемки уже практически всё сделано, кроме вот того, о что я попросил объяснить smile А если искать другое решение, то всё переделывать придётся.
Когда сделаю, обязательно расскажу!

А пока... Нет, в общих чертах я сейчас расскажу smile Например, зрительный зал (или школьный класс, или автостоянка, или ещё что-нибудь). Определение, занято ли место (разными способами, в зависимости от того, зал это зрительный, или конференционный, или стоянка) и добавление данных о человеке, занимающим данное место (например, телефон его, ФИО и проч.) через отдельную форму.

Алгоритм примерно такой при клике по контролу, означающему какое-то место на плане зала:
1. Передача в функцию имени места, то, о чём я и спрашиваю - номера его (имя контрола на плане зала)
2. Определение, занято или свободно место
3. Затем, если свободно, открыть форму для заполнения именно этого места. После принятия данных место считается занятым
4. Если место занято, то открыть форму очистки (освобождения) места
5. Ну и, в конце концов, обновление формы-плана зала (окраска занятых-незанятых мест в разные цвета)

Вот такие пироги. Первый пункт - вот чего прошу объяснить smile
Добавлено @ 18:24
Кстати, чё значит
Цитата
не свою среду визуального построения макетов поди пишешь...
???
Всё моё smile Личное

Заранее благодарю за помощь smile

Это сообщение отредактировал(а) АлексейМ - 29.8.2005, 18:20
PM MAIL   Вверх
Akina
Дата 29.8.2005, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



И ты эту всю байду рисуешь ректанглами? да ты сам виноват - выбрал наихудший по реализации вариант. Замени просто кучу прямоугольников на массив (слышишь? МАССИВ!) лэйблов - и от твоих проблем ничего не останется... мало того что лабел принимает клик, так когда есть уцправляющий массив, он принимается как
Код

Private Sub Label1_Click(Index As Integer)
...
End Sub

Так что не зря я с тебя тряс целю работы... а по коду от такой замены будет правка ну просто минимальная.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
АлексейМ
Дата 30.8.2005, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Спасибо огромное!

Когда я буду массив лэйблов использовать, всё-таки будет определятся имя конкретного лэйбла при клике по нему? smile smile smile

PM MAIL   Вверх
Akina
Дата 30.8.2005, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата
Когда я буду массив лэйблов использовать, всё-таки будет определятся имя конкретного лэйбла при клике по нему?

Имя у них будет на всех одно. А вот индекс у каждого свой - и он передается обработчику события.

грубо - если у тебя 5 рядов по 5 лэйбаков, то

Код

Private Sub Label_Click(Index As Integer)
' Index может быть от 0 до 24
Row = Index \ 5 + 1
Col = Index MOD 5 + 1
End Sub


Ты эта... прежде чем спрашивать - попробуй...

Простейший способ создания массива контролов с управляющим массивом - это копирование-вставка в макете... при вставке второго экземпляра тебе будет предложено создать управляющий массив - согласись. Обработчики событий пиши ПОСЛЕ создания управляющего массива - иначе придется дописывать аргумент руками.

И не забудь отслеживать порядок расположения лэйблов по этому индексу. Да, индекс начинается с нуля.
Добавлено @ 09:29
Что еще удобно - достаточно в макете поместить 1 лабел с управляющим массивом, а остальные можно создавать из него в рантайме... но это потом, сперва со статическим массивом контролов разберись.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
АлексейМ
Дата 30.8.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Спасибо!
smile smile smile


P.S. Пробую прибамбасы форума smile
PM MAIL   Вверх
АлексейМ
  Дата 30.8.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Эээ... Позвольте ещё вопросик - что такое лабел? В смысле по-русски...
А то чё-то в справке не нашёл smile
Я ещё немного новичок.
PM MAIL   Вверх
Akina
Дата 30.8.2005, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Label. Он же Надпись.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
АлексейМ
Дата 30.8.2005, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Понял.
PM MAIL   Вверх
АлексейМ
Дата 6.9.2005, 05:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Все хелпы перерыл, а как массив сделать, не нашёл. Подскажите, кто могет!
PM MAIL   Вверх
Papirus
Дата 6.9.2005, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Чессно говоря, про массивы контролов в VB6 знаю, а в Access не встречал и есть большие сомнения, что они таки существуют.
Добавлено @ 08:07
Есть еще и такой вариант действий (не такой красивый, к сожалению, как с массивом) - создать функцию с параметром в общем модуле. Затем разместить Надписи на форме и в свойствах каждой на событие клик (или иное) прописать =ИмяФункции(Параметр). Зато здесь сам управляешь - какой лейбл какой параметр передает функции. При этом также как и с массивом изменения в алгоритм работы проги потребуется вносить только раз.
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0574 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.