powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / [VB6] Узнать ширину контейнера из юзерконтрола.
25 сообщений из 28, страница 1 из 2
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846161
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот я уперся, аж дымлюсь.

Есть юзерконтрол. Он лежит на каком-то контейнере. Мне нужно изнутри юзерконтрола узнать некоторые параметры контейнера (пусть Width для определенности)

Если юзерконтрол лежит на форме или фрейме, то я без проблем узнаю, используя Parent (даже не требуется Extender). Если же юзерконтрол лежит на другом юзерконтроле, я получаю "Object doesn't support this property or method", какие бы я комбинации не пробовал.

Вот.
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846181
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тестовый проектик
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846185
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

А вот так не получается?
Код: plaintext
MsgBox Command.Container.Name
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846188
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_PristА вот так не получается?
Код: plaintext
MsgBox Command.Container.Name


нет, та же ошибка
проектик приложил - можно потыкать

большая кнопка работает, маленькая - нет.
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846229
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

У меня вот такой код работает:

Код: plaintext
1.
2.
Private Sub Command1_Click()
MsgBox Command1.Parent.Name
End Sub
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846239
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_PristУ меня вот такой код работает:
Давайте, если вы не знаете, что такое юзерконтрол, не будете забивать топик бессмысленными сообщениями.
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846290
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДавайте, если вы не знаете, что такое юзерконтрол, не будете забивать топик бессмысленными сообщениями.Договорились. Последняя попытка и я больше в Ваши умные темы не лезу:

Код: plaintext
1.
2.
3.
4.
Private Sub Command1_Click()
If UserControl.ParentControls.Count >  0  then
MsgBox UserControl.ParentControls.Item( 0 ).Name
End If
End Sub

Код: plaintext
1.
2.
3.
4.
5.
Private Sub Command1_Click()
Dim li As Long
For li =  0  To UserControl.ParentControls.Count -  1 
MsgBox UserControl.ParentControls.Item( 0 ).Name
Next li
End Sub
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846309
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,

Опять мимо. Мне нужен сам контейнер, а не его вложенные контролы
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846313
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProThe_Prist,

Опять мимо. Мне нужен сам контейнер, а не его вложенные контролы
А, стоп, может и не мимо
Ща буду экспериментировать
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846324
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist

Похоже, то, что нужно, спасибо огромное.

Вообще, свойство ParentControls - вещь глючная. Я обнаружил, что работа с этой коллекцией при условии, что в ней более 15-20 контролов, приводит к аварийному завершению как IDE, так и скомпилированного exe-шника в произвольных местах, но довольно стабильно, поэтому я от нее отказался.
Посмотрю, будет ли всплывать этот глюк при условии работы с единственным нулевым элементом...
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846340
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

не это?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Command1_Click()

Dim gg As Object


Set gg = UserControl.ParentControls.Item( 0 )

MsgBox gg.Parent.Name

End Sub
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846341
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

тю блин пока вернулся к компу :)
в общем сорри за баян получается
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846473
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro , а для чего все это нужно? Может имеет смысл в свойство . Tag UserControl-а записывать имя Котрола-Родителя и затем при необходимости считывать? Ведь UserControl-ы Вы наверняка создаете не программно. Это будет намного менее глючно и более стабильно. К тому же можно всегда поменять...
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846480
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist Shocker.Pro , а для чего все это нужно? Может имеет смысл в свойство . Tag UserControl-а записывать имя Котрола-Родителя и затем при необходимости считывать? Ведь UserControl-ы Вы наверняка создаете не программно. Это будет намного менее глючно и более стабильно. К тому же можно всегда поменять...

1) Я не понял, а для чего, собственно, это нужно? Как мне знание его имени поможет получить его ширину?
2) Это неудобно, ну представьте, вам каждый раз, когда вы размещаете кнопку на форме нужно в тэг кнопки вписать еще и имя формы. А также не забыть поменять все тэги, если сменилось имя формы.
3) Внешний контрол создается программно, хотя опять же не ясно, какое это имеет значение.
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846500
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProКак мне знание его имени поможет получить его ширину?Поместите в свойство Tag UserControl-а значение имени рамки(UserControl21)

Затем обработайте событие нажатия кнопки:
Код: plaintext
1.
2.
Private Sub Command1_Click()
MsgBox Form1.Controls(CStr(UserControl.Tag)).Width
End Sub

Вот Вы и получили нужное свойство нужного элемента.
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846511
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_PristShocker.ProКак мне знание его имени поможет получить его ширину?Поместите в свойство Tag UserControl-а значение имени рамки(UserControl21)

Затем обработайте событие нажатия кнопки:
Код: plaintext
1.
2.
Private Sub Command1_Click()
MsgBox Form1.Controls(CStr(UserControl.Tag)).Width
End Sub

Вот Вы и получили нужное свойство нужного элемента.

Ха!
А ссылку на форму где самый вложенный юзерконтрол возьмет???
А если внешний контрол лежит не на форме, а на другом юзерконтроле?

Ну и самое главное, как я могу вписать тэг для внутреннего юзерконтрола, если внешний юзерконтрол лежит на разных формах и, разумеется, имеет разные имена на них?

Вы поймите - это библиотека, а не какие-то разовые конструкции. Нельзя делать привязку к конкретным объектам - только относительные ссылки.
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846522
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Вы поймите - это библиотека, а не какие-то разовые конструкции. Нельзя делать привязку к конкретным объектам - только относительные ссылки.Я давно все понял. Ваше отношение ко мне какое-то странно-неприязненное. Я тоже не первый день в VB программирую. И для меня немного странны Ваши вопросы типа, как получить свойство контрола, зная его имя.

Shocker.ProА ссылку на форму где самый вложенный юзерконтрол возьмет???
Вот Вам еще, вдруг не знаете. Из Tag можно и имя формы вытащить:

Tag = "Form1,UserControl21"

Код: plaintext
1.
2.
3.
4.
Private Sub Command1_Click()
Dim sStr
sStr = Split(UserControl.Tag, ",")
MsgBox Forms.Add(sStr( 0 )).Controls(CStr(sStr( 1 ))).Width
End Sub

Можно или нельзя делать привязки к объектам - это Вам решать. Вы проект делаете, я лишь пытаюсь помочь. И естественно всех аспектов Вашего проекта не знаю. Но с Вашей стороны вижу лишь язвительные усмешки и осуждения моих попыток Вам помочь. Дело Ваше - ищите методы сами....
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846524
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist, в таких случаях пишут +1, а где тот вич, который мне советовал кнопку гладить дурацким методом????
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846529
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_PristЯ тоже не первый день в VB программирую. И для меня немного странны Ваши вопросы типа, как получить свойство контрола, зная его имя.
Да блин, знаю я, разумеется, как получить ссылку на контрол, зная его имя, но ведь при условии, что мне доступна коллекция Controls. А вот это-то то как раз проблема, юзерконтрол заранее не знает, где он будет размещен и какова цепочка от него до корневой формы.
Сплит я тоже знаю, сам постоянно советую его другим.

Ваш совет записывать всю цепочку в tag выглядит... эм.... странным. Не решает это, в общем, проблему и создает кучу неудобств программисту, о чем я и попытался вам сказать.

The_PristВаше отношение ко мне какое-то странно-неприязненное.
Я вас поначалу спутал с другим товарищем тоже с ником из двух слов, удивившись первоначальным советом не в тему (без участия юзерконтрола). Приношу извинения.
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846530
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Я вас поначалу спутал с другим товарищем тоже с ником из двух слов.
Это ЦЭ???????
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846533
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
offЦипихович ЭндрюShocker.Pro
Я вас поначалу спутал с другим товарищем тоже с ником из двух слов.

Это ЦЭ???????
ты себе льстишь

я понял, что ошибся, просмотрев грамотные советы The_Prist-а в других топиках
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846574
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

А чего ты собственно говоря хочешь добиться? В нормальном ГУИ, виджету не нужно ничего знать о контейнере. Контейнер знает о своих виджетах, а не наоборот. Мне сильно кажется что у тебя неверная постановка задачи.
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846580
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlА чего ты собственно говоря хочешь добиться? В нормальном ГУИ, виджету не нужно ничего знать о контейнере. Контейнер знает о своих виджетах, а не наоборот. Мне сильно кажется что у тебя неверная постановка задачи.

Как насчет StatusBar? ;-) Это нормальный ГУИ?

В общем задача похожа - контрол себя позиционирует в контейнере в зависимости от определенных настроек.
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846605
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProВ общем задача похожа - контрол себя позиционирует в контейнере в зависимости от определенных настроек.Угу... Переверни задачу: Не контрол себя позиционирует, а контейнер определяет размеры своих контролов.

Займись изучением java и/или Qt-С++. Не обязательно переходить на них, просто посмотри как там сделана система отрисовки объектов в контейнере (система layout'ов). Возьми любой учебник по java например и прочитай главу про layout, просто чтобы идею понять.

На практике: вешаешь на контейнер набор событий (изменение размеров, максимизировать/минимизировать) и сортированый массив ссылок на контролы. В массиве(ах) у тебя будет указано какой из контролов где должен находится относительно других контролов.
Из событий пробегаешь по этому массиву и уже практически решаешь какие будут размеры и где будет находится каждый из контролов.


StatusBar, кстати, тоже не сам себя отрисовывает. Его отрисовывает окно и оно-же решает где StatusBar должен находится.
...
Рейтинг: 0 / 0
[VB6] Узнать ширину контейнера из юзерконтрола.
    #36846620
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ох-ох-ох.

Я не хотел вдаваться в подробности, думал отмажусь упрощенным вариантом, не вышло.

У меня сделана схема Layout для формы (загружается из БД в коллекцию и отрабатывает по Maximize/Restore и т.п.). Этим занимается (загрузкой и раскидыванием элементов) некий библиотечный класс, привязанный к контейнеру. Класс универсальный, контейнер произвольный.

Но есть один нюанс. Класс сам реализован не в виде Class Module, а в виде UserControl. Щас ты меня шишками закидаешь, как я неправ, ну уж очень не хочется на ночь глядя спорить о правильности этого подхода. То есть я кидаю на контейнер UserControl и он сам занимается кучей вещей по обслуживанию других контролов контейнера (в частности Layout, но это всего лишь одна из многих его задач). Почему? Для собственного удобства - к юзерконтролу привязаны пропертипейджи для легкости его настройки.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / [VB6] Узнать ширину контейнера из юзерконтрола.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]