"Группа переключателей" в VB6

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

"Группа переключателей" в VB6

Сообщение 0xy » 15.07.2010 (Чт) 2:10

Как в VB6 создать аналог акцесовской "группы переключателей"?

Если разместить переключатели на фрейме, то онм вроде "чувствуют единство" (включаются только по-одному), но при этом не видно переменноой, отражающей состояние группы. :?:
Код: Выделить всё
VERSION 5.00
Begin VB.Form Form1
   Caption         =   "Form1"
   ClientHeight    =   3195
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   4680
   LinkTopic       =   "Form1"
   ScaleHeight     =   3195
   ScaleWidth      =   4680
   StartUpPosition =   3  'Windows Default
   Begin VB.Frame Frame1
      Caption         =   "Frame1"
      Height          =   1275
      Left            =   1740
      TabIndex        =   0
      Top             =   630
      Width           =   2625
      Begin VB.OptionButton Option1
         Caption         =   "Option1"
         Height          =   525
         Left            =   300
         TabIndex        =   2
         Top             =   480
         Width           =   1095
      End
      Begin VB.OptionButton Option2
         Caption         =   "Option2"
         Height          =   525
         Left            =   1560
         TabIndex        =   1
         Top             =   480
         Width           =   945
      End
   End
End

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: "Группа переключателей" в VB6

Сообщение Twister » 15.07.2010 (Чт) 7:18

но при этом не видно переменноой, отражающей состояние группы.
Можно использовать массив контролов и жизнь станет легче :)
А я все практикую лечение травами...

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: "Группа переключателей" в VB6

Сообщение 0xy » 15.07.2010 (Чт) 23:43

А так, как у меня, разве не должно работать? Ведь для чего-то они включаются ТОЛЬКО по-одному???

PS
Что-то я не заметил особого облегчения от массива :(

PPS
А можно ли как-то запихнуть готовую форму Access 97 (c ейным модулем) в проект VB?

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: "Группа переключателей" в VB6

Сообщение Twister » 16.07.2010 (Пт) 7:19

Что-то я не заметил особого облегчения от массива
Может ты не туда смотрел? ;)

Есть два варианта решения:

1. Все контролы имеют общий обработчик события изменения состояния. При изменении состояния очередного переключателя его индекс где-то сохраняется. Это и будет твоим состоянием группы.
2. Пишется функция, которая в цикле пробегается по массиву переключателей и ищет "чекнутый".
А я все практикую лечение травами...

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: "Группа переключателей" в VB6

Сообщение 0xy » 16.07.2010 (Пт) 18:48

Про первый вариант я не подумал. Так действительно проще.
Но сие есть лишь частичная эмуляция функционала акцессовского контрола OptionGroup, прямого аналога которому в VB, как я понял, нет. В связи с этим возник вопрос: можно ли разместить этот (и другие) контролы от Access на форме VB, и если да, то как?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: "Группа переключателей" в VB6

Сообщение Хакер » 16.07.2010 (Пт) 19:36

И ты будешь с самостоятельными (stand-alone) приложениями таскать кусок (компонент) от Access? Как ты думаешь, что на этот счёт думает лицензия Office?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: "Группа переключателей" в VB6

Сообщение 0xy » 16.07.2010 (Пт) 20:57

У меня задача--с минимальнными трудозатратами переносить из Access 97 в VB готовые формы и компилить из них exe.
Таскать с собой кусок Access (или другой компонент, содержащий аналогичные контролы), в принципе, приемлемо.
По-сему прошу помочь отыскать местожительства OptionGroup в Access.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: "Группа переключателей" в VB6

Сообщение Хакер » 16.07.2010 (Пт) 21:05

Да причём тут приемлемость с точки зрения тебя? Важна приемлемость с точки зрения лицензии.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: "Группа переключателей" в VB6

Сообщение alibek » 16.07.2010 (Пт) 21:58

К тому же, OptionGroup не будет жить на форме VB.
У него свой контейнер, форма Access.
Lasciate ogni speranza, voi ch'entrate.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: "Группа переключателей" в VB6

Сообщение 0xy » 16.07.2010 (Пт) 22:42

Но неужели не существует аналогов, совместимых с VB?
Я слыхал, что OptionGroup есть еще в FoxPro...

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: "Группа переключателей" в VB6

Сообщение iGrok » 16.07.2010 (Пт) 22:54

Господи, ну напиши ты свой UC-аналог с аналогичным поведением, методами и свойствами! Делов-то!
label:
cli
jmp label

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: "Группа переключателей" в VB6

Сообщение 0xy » 17.07.2010 (Сб) 0:04

Я не знаю, как такое писать :(

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: "Группа переключателей" в VB6

Сообщение FireFenix » 17.07.2010 (Сб) 0:10

О Господи! *face palm*

Создаёшь массив контролов RadioButton
Вешаешь на ка каждый RadioButton ивент OnClick, где в цикле пробегаешь по массиву и выставляешь Value = False, а владельцу события True
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: "Группа переключателей" в VB6

Сообщение Хакер » 17.07.2010 (Сб) 0:27

де в цикле пробегаешь по массиву и выставляешь

Глупость. Зачем пробегаться, если выбранный элемент известен?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: "Группа переключателей" в VB6

Сообщение 0xy » 17.07.2010 (Сб) 1:12

Я имел в виду, что не знаю, как написать свой КОНТРОЛ-- "аналог с аналогичным поведением, методами и свойствами!" А было бы неплохо :)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: "Группа переключателей" в VB6

Сообщение iGrok » 17.07.2010 (Сб) 1:49

0xy писал(а):Я имел в виду, что не знаю, как написать свой КОНТРОЛ-- "аналог с аналогичным поведением, методами и свойствами!" А было бы неплохо :)

Дык это, никогда не поздно научиться, тем более ничего же сложного! =)

Создаёшь UserControl, кидаешь в него Frame и массив OptionButton'ов. Плюс делаешь ему свойства и методы, аналогичные тем, что есть у OptionGroup, и пишешь код. Будут конкретные трудности - пиши, подскажем. =)
label:
cli
jmp label

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: "Группа переключателей" в VB6

Сообщение 0xy » 17.07.2010 (Сб) 3:16

Будут конкретные трудности - пиши, подскажем.

Уже есть :) "Создаёшь UserControl"--это где? (я плохо ориентируюсь в оболочке VB).

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: "Группа переключателей" в VB6

Сообщение Хакер » 17.07.2010 (Сб) 3:44

Alt+P-U
Project→Add User control.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: "Группа переключателей" в VB6

Сообщение 0xy » 17.07.2010 (Сб) 17:48

Создаёшь UserControl, кидаешь в него Frame и массив OptionButton'ов.

А массив зачем? Ведь OptionGroup не содержит Button-ов, а лишь является контейнером для онных.

Н-да, видать, без подсказок мне эту часть не осилить :(
iGrok
Если не лень, нарисую, плиз, пример юзерконтрола (на основе фрейма), на котором можно потом (в конструкторе форм?) размещать другие контролы.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: "Группа переключателей" в VB6

Сообщение iGrok » 17.07.2010 (Сб) 18:13

0xy писал(а):iGrok
Если не лень, нарисую, плиз, пример юзерконтрола (на основе фрейма), на котором можно потом (в конструкторе форм?) размещать другие контролы.

ControlContainer = True =)
label:
cli
jmp label

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: "Группа переключателей" в VB6

Сообщение 0xy » 18.07.2010 (Вс) 1:23

Хорошо. Идем дальше :)
Теперь как добавить нашему контролу единственное свойство "Value"?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: "Группа переключателей" в VB6

Сообщение iGrok » 18.07.2010 (Вс) 1:37

Код: Выделить всё
Public Property Get Value() As Long
End Property


З.Ы.
1) Add-Ins -> Add-In Manager -> VB 6 ActiveX Ctrl Interface Wizard -> Loaded -> OK
2) Add-Ins -> ActiveX Control Interface Wizard
Вдоволь экспериментируем с появившимся визардом, создаём контрол, смотрим на автоматически созданный код. Это устранит часть вопросов. ,-)
label:
cli
jmp label

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: "Группа переключателей" в VB6

Сообщение 0xy » 18.07.2010 (Вс) 2:38

A как сделать, чтобы добавленное свойство (к примеру, DefaultValue) появилось в свойствах конструктора (Value у меня там не появилось).
2. Можно ли задать дефолтное свойство контрола (как .Number у Err)?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: "Группа переключателей" в VB6

Сообщение Хакер » 18.07.2010 (Вс) 3:11

1) Что такое свойства конструктора?
2) Да, в соответствии со спецификацией ActiveX, свойство, имющее DispId=DISPID_VALUE считается свойством по умолчанию. Чтобы этого добиться, нужно в «Tools→Procedure Attributes» выбрать значение поля «Procedure ID» равное «(Default)».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: "Группа переключателей" в VB6

Сообщение iGrok » 18.07.2010 (Вс) 13:31

0xy писал(а):A как сделать, чтобы добавленное свойство (к примеру, DefaultValue) появилось в свойствах конструктора (Value у меня там не появилось).

Это надо работать с PropertyBag, воспользуйся визардом разок, он как раз генерирует нужный для этого код, а дальше сам поймёшь.
label:
cli
jmp label


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

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

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 88

    TopList