Контейнер

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
beat_swamp
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 05.10.2005 (Ср) 16:16

Контейнер

Сообщение beat_swamp » 26.10.2005 (Ср) 16:06

суть вопроса(читай "проблемы") состоит в следущем:

на форме есть объект TabPlans (SSTab). количество закладок (TabPlans.Tabs) определяется во время выполнения программы (кажется это называется "Run-Time"). на каждой вкладке должно быть по одному объекту типа PictureBox. для этого я на певой (нулевой) закладке вставляю PictureBox (Name = pctPlan) и задаю этому объекту свойство Index = 0. соответственно у меня как бы создается массив (как я понял).
далее в процессе выполнения программы я нахожу количество закладок и создаю необходимое кол-во PictureBox'ов. и хочу разместить по одному пикчербоксу на каждой из закладок. вот так:
Код: Выделить всё
For i = 0 To TabPlans.Tabs - 1
    If i > 0 Then Load pctPlan(i)
    TabPlans.Tab = i
    pctPlan(i).Container.Tab = TabPlans.Tab
    pctPlan(i).Visible = True
Next

ничего не получается1 +/ подскажите плиз решение проблемы1

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.10.2005 (Ср) 16:14

Set pctPlan(i).Container = TabPlans.Tab
Только не уверен, что с SSTab это сработает.
Lasciate ogni speranza, voi ch'entrate.

beat_swamp
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 05.10.2005 (Ср) 16:16

Сообщение beat_swamp » 26.10.2005 (Ср) 16:21

alibek, не сработало1 +(
ты думаешь именно с сстаб такая проблема? или со табстрипами тоже будет такая фигня?

2All: люди помогите1 проект горит1 +(

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 26.10.2005 (Ср) 16:34

beat_swamp писал(а):alibek, не сработало1 +(
ты думаешь именно с сстаб такая проблема? или со табстрипами тоже будет такая фигня?

2All: люди помогите1 проект горит1 +(


Не совсем понятно что тебе нужно в итоге.
Одним PictureBox-ом почему нельзя обойтись?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.10.2005 (Ср) 16:46

beat_swamp писал(а):alibek, не сработало1 +(
ты думаешь именно с сстаб такая проблема? или со табстрипами тоже будет такая фигня?

Да, думаю проблема именно с SSTab.
С ТабСтрипами такой проблемы не будет, но они не являются контейнерами, т.е. тебе для каждого стрипа нужно будет создавать фрейм, а уже внутрь фрейма грузить PictureBox, т.е. Set Picture1(1) = Frame1(1).
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 26.10.2005 (Ср) 16:50

alibek писал(а):С ТабСтрипами такой проблемы не будет, но они не являются контейнерами, т.е. тебе для каждого стрипа нужно будет создавать фрейм, а уже внутрь фрейма грузить PictureBox, т.е. Set Picture1(1) = Frame1(1).


Зачем??? Не проще, например, иметь всего один PictureBox и при выборе Tab-а грузить в него нужный рисунок?

Надо понять что человек пытается получить в итоге ибо не совсем ясно для чего это...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.10.2005 (Ср) 16:52

Ну не знаю, зачем.
Может задача именно так и стоит?
Lasciate ogni speranza, voi ch'entrate.

beat_swamp
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 05.10.2005 (Ср) 16:16

Сообщение beat_swamp » 26.10.2005 (Ср) 16:53

Andrey Fedorov писал(а):Не совсем понятно что тебе нужно в итоге.
Одним PictureBox-ом почему нельзя обойтись?

нельзя1 в пикчербоксах будут большие изображения которые будут браться из базы данных на удаленном компе1
к тому же закладки будут часто переключаться то есть по сети будет гоняться достаточно большие объемы информации и прога будет притормаживать1 пусть лучше она в начале потормозит и больше не будет1 +)

alibek писал(а):Да, думаю проблема именно с SSTab.
С ТабСтрипами такой проблемы не будет, но они не являются контейнерами, т.е. тебе для каждого стрипа нужно будет создавать фрейм, а уже внутрь фрейма грузить PictureBox, т.е. Set Picture1(1) = Frame1(1).

так ведь получается та же самая проблема - вставить фрейм в ССТаб или ТабСтрип1 +/

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.10.2005 (Ср) 16:56

1. Загружаешь изображения в невидимый массив Image.
2. ТабСтрип -- НЕ контейнер. Это просто визуальный контрол с вкладками. Контейнеры ты делаешь сам, создавая массив фреймов без границ, один из которых будет видим (переключаться при переключении стрипов), а остальные невидимы.
3. Загружаешь PictureBox (или что тебе надо), назначаешь ему контейнер, Set <PictureBox> = fraImages(<index>). Т.е. либо загружаешь массив PictureBox'ов и расставляешь их по фреймам-контейнерам, либо используешь один PictureBox, просто меняешь для него контейнер.
4. После этого загружаешь картинку в него, Set PictureBox.Picture = Image.Picture.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 26.10.2005 (Ср) 16:57

beat_swamp писал(а):
Andrey Fedorov писал(а):Не совсем понятно что тебе нужно в итоге.
Одним PictureBox-ом почему нельзя обойтись?

нельзя1 в пикчербоксах будут большие изображения которые будут браться из базы данных на удаленном компе1
к тому же закладки будут часто переключаться то есть по сети будет гоняться достаточно большие объемы информации и прога будет притормаживать1 пусть лучше она в начале потормозит и больше не будет1 +)


Вообще-то это не причем. Изображения из базы можно считать вначале (кто этому мешает?), а потом при когда нужно грузить их в один и тот-же PictureBox. Я пока не вижу причины их тебе плодить.

Для тех условий что ты сказал я бы использовал TabStrip и один PictureBox (или Image). И не мудрил.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 26.10.2005 (Ср) 17:01

alibek писал(а):Контейнеры ты делаешь сам, создавая массив фреймов


А нафига, собственно, какие-то контейнеры в данной ситуации?

Ему и надо-то всего-навсего при смена Tab-а выводить соответствующий ему рисунок... :lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.10.2005 (Ср) 17:02

Ну мало ли :)
Может там помимо картинки другие контролы есть, слишком разнородные.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 26.10.2005 (Ср) 17:05

alibek писал(а):Ну мало ли :)
Может там помимо картинки другие контролы есть, слишком разнородные.


Об этом речи не было вообще.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

beat_swamp
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 05.10.2005 (Ср) 16:16

Сообщение beat_swamp » 26.10.2005 (Ср) 17:13

на каждой закладке будет одна картинка большая а поверх нее куча маленьких, плюс текстовые элементы1

beat_swamp
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 05.10.2005 (Ср) 16:16

Сообщение beat_swamp » 26.10.2005 (Ср) 17:29

alibek писал(а):1. Загружаешь изображения в невидимый массив Image.
2. ТабСтрип -- НЕ контейнер. Это просто визуальный контрол с вкладками. Контейнеры ты делаешь сам, создавая массив фреймов без границ, один из которых будет видим (переключаться при переключении стрипов), а остальные невидимы.
3. Загружаешь PictureBox (или что тебе надо), назначаешь ему контейнер, Set <PictureBox> = fraImages(<index>). Т.е. либо загружаешь массив PictureBox'ов и расставляешь их по фреймам-контейнерам, либо используешь один PictureBox, просто меняешь для него контейнер.
4. После этого загружаешь картинку в него, Set PictureBox.Picture = Image.Picture.


но я же не могу заранее знать сколько у меня табов будет. соответственно сколько фреймов должно быть в масиве фреймов? и как их распихать по табам?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.10.2005 (Ср) 17:31

beat_swamp писал(а):и как их распихать по табам?

Дубль два. ТабСтрим -- НЕ контейнер.
Lasciate ogni speranza, voi ch'entrate.

beat_swamp
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 05.10.2005 (Ср) 16:16

Сообщение beat_swamp » 26.10.2005 (Ср) 17:53

тогда зачем массив фреймов?

зы alibek у тебя есть аська? напиши мне плиз 166394056.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 27.10.2005 (Чт) 7:45

beat_swamp писал(а):на каждой закладке будет одна картинка большая а поверх нее куча маленьких, плюс текстовые элементы1


Их кол-во одинаково на каждой вкладке? Можно сделать UserControl?

P.S Можно и динамически добавлять контролы, но зачем плодить на форме кучу мусора когда вполне можно обойтись и одним...
Вложения
S.RAR
(4.94 Кб) Скачиваний: 34
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

beat_swamp
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 05.10.2005 (Ср) 16:16

Сообщение beat_swamp » 27.10.2005 (Чт) 9:04

Andrey Fedorov писал(а):
beat_swamp писал(а):на каждой закладке будет одна картинка большая а поверх нее куча маленьких, плюс текстовые элементы1


Их кол-во одинаково на каждой вкладке? Можно сделать UserControl?

P.S Можно и динамически добавлять контролы, но зачем плодить на форме кучу мусора когда вполне можно обойтись и одним...


дело в том что на разных вкладках будет одна "большая" картинка, разное количество "маленьких" картинок и элементов текста.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.10.2005 (Чт) 9:29

Хорошо, начнем сначала.

TabStrip -- это не контейнер, это просто визуальный контрол с вкладками.
Если тебе нужно, чтобы при переключении вкладок "переключался" набор контролов, то для этого есть два способа. Первый -- динамически генерировать и позиционировать контролы, подходит, когда на всех вкладках контролы более-менее одинаковые. Второй -- для каждой вкладки создать свой набор контролов, разместив их в контейнерах (по контейнеру на каждую вкладку), и, соответственно, отображать только тот контейнер, который соответствует выбранной вкладке, скрывая остальные. Самый удобный контейнер -- Frame. Впрочем ты можешь использовать и PictureBox или UserControl, дело твое.

Как я понял твою задачу, у тебя неограниченное количество вкладок, на каждой из которых должна отображаться большая картинка и несколько маленьких с текстовыми элементами. То есть, отдельный контейнер на каждую вкладку тебе не нужен, эти вспомогательные элементы можно позиционировать для каждой вкладки. Я бы сделал так.

На форме есть TabStrip, есть элемент массива, невидимый Image(0), есть PictureBox, есть набор невидимых картинок и текстовых элементов (Image, Label).
При загрузке формы я определяю, сколько должно быть вкладок, устанавливаю это количество и задаю имена для вкладок. Кроме того, я загружаю массив Image(), добавляя столько же элементов, сколько вкладок.
При выборе вкладки выполняются следующие действия:
1. Загружается картинка в соответствующий Image(), если она еще не загружалась (проверка Image(I).Picture Is Nothing).
2. Позиционируется PictureBox и выполняется Set PictureBox.Picture = Image(I).Picture.
3. Позиционируются вспомогательные элементы.
Последний раз редактировалось alibek 27.10.2005 (Чт) 10:41, всего редактировалось 1 раз.
Lasciate ogni speranza, voi ch'entrate.

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 27.10.2005 (Чт) 10:39

Так можно делать, только не могу код написать по памяти....
После 17-00 напишу (по СПБ)...


ЗЫ всмысле на SSTab на каждой странице ПикчерБокс..
Пора уже всем хорошим людям собраться и убить всех плохих людей.

beat_swamp
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 05.10.2005 (Ср) 16:16

Сообщение beat_swamp » 27.10.2005 (Чт) 10:53

буду ждать1
а пока попробую сделать как Alibek написал1

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 27.10.2005 (Чт) 17:32

Код: Выделить всё
For i = 0 To TabPlans.Tabs - 1
    If i > 0 Then Load pctPlan(i)
    TabPlans.Tab = i
    Set pctPlan(i).Container = TabPlans
    pctPlan(i).Visible = True
    pctPlan(i).Move 100 * i, 1000
  Next i
TabPlans.Tab = 0


Только на Form_Load его не вешай

И еще непонятный глюк там :о/ pctPlan(1) - виден на двух страницах (0 и 1)

Короче может это только у меня
Пора уже всем хорошим людям собраться и убить всех плохих людей.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 160

    TopList