Как обратиться ко всем Control в конкретной SSTab.Tab?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Как обратиться ко всем Control в конкретной SSTab.Tab?

Сообщение Rojohn » 22.08.2005 (Пн) 17:34

Подскажите плз, как программно обратиться ко всем Control в конкретной вкладке SSTab, или ко всем по-очереди. Надо, например, изменить ширину всех Control, входящих в SSTab.Tab=3. Пробовал использовать SSTab как Container для элементов, но выдаёт, что, например, Label1.Container=0. При обращении ко всем Control формы изменение свойств Control на невидимых вкладках SSTab невозможно.
Как быть? Спасибо!

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 22.08.2005 (Пн) 17:48

А свойство .Parent, как, не помогает?

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

Сообщение alibek » 22.08.2005 (Пн) 18:01

Я бы сказал, что не Parent (это форма), а Container.
Lasciate ogni speranza, voi ch'entrate.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 22.08.2005 (Пн) 18:04

Сontainer у него не работает - афтор пишет так по крайней мере.

Так что, я посоветовал Parent - методом исключения.

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

Сообщение alibek » 22.08.2005 (Пн) 18:06

Афтар просто не умеет их готовить :)
Код: Выделить всё
For Each ctrl In Me.Controls
  If ctrl.Container Is SSTab1 Then
    ...
  End If
Next ctrl
Lasciate ogni speranza, voi ch'entrate.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Хм...

Сообщение Rojohn » 22.08.2005 (Пн) 19:15

For Each ctrl In Me.Controls
If ctrl.Container Is SSTab1 Then
...
End If
Next ctrl


А как в этом случае обратиться к конкретному SSTab.Tab (Ко всем элементам ентого Tab)?

И как использовать Parent?

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Дополнение...

Сообщение Rojohn » 22.08.2005 (Пн) 19:27

Пример
For Each ctrl In Me.Controls
If ctrl.Container Is SSTab1 Then
...
End If
Next ctrl

В ентом примере Control-ы на невидимых вкладках всё равно не поменяют свою ширину (эмпирически - не проверял, но судя по тексту аналогично простому перечислению Control-ов формы). Надо обратиться к Control-ам конкретного Tab...

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Ещё дополнение...

Сообщение Rojohn » 23.08.2005 (Вт) 0:59

Короче я так понял, что SSTab вообще хреново реагирует на обращение к элементам на закрытых вкладках, т.е. если стоишь на конкретной Tab, то другие (невидимые) Control-ы юзать бесполезно. Вот если бы можно было бы обратиться в цикле к Control-ам активного Tab, не перебирая при этом остальные Control-ы... Но, боюсь, это нереально. Поэтому заставил себя прописать всё ручками. Беда только в том, что пока все ресайзы пройдут, глазам юзера будет предоставлена такая мозаика перепостроений, особенно на тормозных компах :? Но сделать всё это задним планом, а потом показать не выйдет, т.к. ресайзинг происходит в реальном времени (Maximized-Minimized и т.д.) Что посоветуете в данном случае? :?:

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

Сообщение alibek » 23.08.2005 (Вт) 8:20

Посоветую выкинуть нафиг SSTab. Юзай TabStrip с массивом фреймов, в которых будут размещены контролы.
Lasciate ogni speranza, voi ch'entrate.

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 23.08.2005 (Вт) 8:32

МДА. Кстати, а можно ли самому написать контрол, как SSTab? Сразу готовые вкладки?

И ещё вопрос. Можно ли к SSTAB прилепить XP Visual Style?
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

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

Сообщение alibek » 23.08.2005 (Вт) 8:33

У контрола задай свойство, что он может являться контейнером. А в коде управляй скрытием/отображением положенных на него элементов, которые нужно отобразить/скрыть.
Lasciate ogni speranza, voi ch'entrate.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Как?

Сообщение Rojohn » 23.08.2005 (Вт) 8:51

Как поставить это свойство у TabStrip? А то всё, что на него ставлю невидимое! И чем он вообще отличается от SSTab? Может там нет чего-нить существенного, что потом выясниться?! И ещё одно: как сделать Case по типам Control-ов (синтаксис TypeOf в Case)?

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

Сообщение alibek » 23.08.2005 (Вт) 8:54

TabStrip это не контейнер, это просто элемент с кнопками и выпуклой рамкой.
Рисуешь TabStrip, поверх него размещаешь Frame1(0) и уже ВНУТРИ фрейма размещаешь свои компоненты. Иначе Label и прочие lightweight-контролы всегда будут им скрыты.

Case TypeName
Но лучше все-же TypeOf, это дополнительный контроль ошибок.
Lasciate ogni speranza, voi ch'entrate.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

?

Сообщение Rojohn » 23.08.2005 (Вт) 8:59

А как поставить что-то на другие вкладки? И потом, ты что-то говорил про:
У контрола задай свойство, что он может являться контейнером.

Значит всё-таки можно задать, чтобы он был контейнером?
А если нельзя, то как потом обращаться к элементам каждой из его вкладок???

И как там насчёт Case по TypeOf? :wink:

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

Сообщение alibek » 23.08.2005 (Вт) 9:05

Блин.

По пунктам.

1. Рисуешь на форме TabStrip, tabMain, создаешь на нем 5 (к примеру) закладок.
2. Размещаешь на форме пять фреймов, fraMain(1)...fraMain(5). Делаешь их все невидимыми, без рамки (BorderStyle=0), позиционируешь их все так, чтобы они размещались "внутри" основной области TabStrip.
3. Размещаешь fraMain(1) поверх всех контролов (Ctrl+J), размещаешь элементы, которые должны быть на первой вкладке. То же самое делаешь с fraMain(2) и т.д.
4. В коде пишешь:
Код: Выделить всё
Private Sub tabMain_Click(...)
Dim I As Long
For I = 1 To 5
  fraMain(I).Visible = (I = tabMain.SelectedItem.Index)
Next I
End Sub

Все.
Свойство можно задать у UserControl, а не у любого контрола.

Case TypeOf нет. Либо If TypeOf ... ElseIf TypeOf ... EndIf, либо Select Case TypeName(<control>). Рекомендую первое.
Lasciate ogni speranza, voi ch'entrate.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Насчёт Case по TypeOf?

Сообщение Rojohn » 23.08.2005 (Вт) 9:07

Я имел ввиду это:
Код: Выделить всё
For Each cContr In frmMain.Controls
    Select Case TypeOf cContr
       Case ComboBox
           ...
       Case Label
           ...
    End Select   
Next cContr

Но это неправильно (так не даёт писать). А как правильно?

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

Сообщение alibek » 23.08.2005 (Вт) 9:12

Ты вообще пробовал читать, что я написал?
Код: Выделить всё
Select Case TypeName(ctl)
  Case "CommandButton"
    ...
End Select
Lasciate ogni speranza, voi ch'entrate.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

О том же...

Сообщение Rojohn » 23.08.2005 (Вт) 9:18

Про TypeOf ясно... Т.е. нельзя написать Case, а нужно писать кучу If-ов... А вот с TabStrip-ом не очень:
1) Получается все контролы надо городить в одну форму? А если их куча и спасало только рассположение их по вкладкам?
2) Зачем создавать fraMain-ы, если у нас уже есть невидимые фреймы с контролами? Получается сначала вешаем все контролы на 5 невидимых Frame, а потом это всё ещё на 5 видимых фреймов?!!!
Как вообще там будет что-то понять? :?

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Про Case...

Сообщение Rojohn » 23.08.2005 (Вт) 9:20

Но лучше все-же TypeOf, это дополнительный контроль ошибок.

А без контроля ошибок намного хуже будет? :)

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

Сообщение alibek » 23.08.2005 (Вт) 9:23

Перечитай мой пост внимательнее и посмотри код.
Lasciate ogni speranza, voi ch'entrate.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

:)

Сообщение Rojohn » 23.08.2005 (Вт) 9:33

А... понял :) Ты говорил про те же фреймы, просто подробнее :))
Хотя, боюсь, городить всё равно придётся :?

Т.е. как правильно обращаться к контролам каждой вкладки, как к контролам с Conteiner = frmMain(1), да?

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

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 10:41

alibek писал(а):2. Размещаешь на форме пять фреймов, fraMain(1)...fraMain(5).[/code]

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

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Happy End:)

Сообщение Rojohn » 23.08.2005 (Вт) 10:51

Великое спасибо всем! :) alibek за подробности :wink: и Andrey Fedorov за PictureBox. Буду пробовать TabStrip.

P.s. Если честно пока не заморачивался со стилями XP и пока даже не представляю в чём программные отличия:) Если можно, киньте ссылочку на основы перехода на ентот стиль... Ещё раз спасибо!

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

Re: Happy End:)

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 11:19

Rojohn писал(а):Если честно пока не заморачивался со стилями XP и пока даже не представляю в чём программные отличия:) Если можно, киньте ссылочку на основы перехода на ентот стиль... Ещё раз спасибо!


Поиск по форуму и по http://www.planet-source-code.com/vb могут сильно помочь...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Ээээ...

Сообщение Rojohn » 23.08.2005 (Вт) 11:20

Вот и первый трабл :? В TabStrip не могу поменять цвет заголовков. Конечно не фатально, но печально...

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

Re: Ээээ...

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 11:36

Rojohn писал(а):Вот и первый трабл :? В TabStrip не могу поменять цвет заголовков. Конечно не фатально, но печально...


Можешь поиграться с этими:

http://vbaccelerator.com/home/VB/Code/Controls/Tab_Controls/index.asp

А вообще старайся придерживаться стандарта цветовых схем. Иначе твой заголовок на каких-то цветовых схемах может просто оказаться нечитаемым...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

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

Сообщение alibek » 23.08.2005 (Вт) 11:46

У PictureBox есть парочка недостатков по сравнению с Frame.
Во-первых, он может принимать фокус, а во-вторых, кушает больше ресурсов :)
Lasciate ogni speranza, voi ch'entrate.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

:)

Сообщение Rojohn » 23.08.2005 (Вт) 11:48

Спасибо, конечно :) Но пока о цветовых схемах я и не помышляю, дай бог чтоб всё работало как надо.... Но вот то, что я не могу сделать заголовок TabStrip вообще никаким цветом, кроме заданного портит немного дело (просто мне надо сделать два вложенных TabStrip и надо, чтобы юзер смог различать их заголовки по цвету...) Хотя я наверное сделаю TabStrip, а в одном из PictureBox повешу ещё маленький SSTab :)

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

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 12:08

alibek писал(а):Во-первых, он может принимать фокус, а во-вторых, кушает больше ресурсов :)


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

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 23.08.2005 (Вт) 12:17

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

След.

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

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

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

    TopList