Передача объекта в процедуру

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

Передача объекта в процедуру

Сообщение tarrac » 19.12.2005 (Пн) 10:25

В эти выходные столкнулся с такой "траблой". Есть процедура, которая в качестве параметра должна принимать объект типа ComboBox. Но при передаи передаеться почему то не сам объект, а только его имя - строка типа String

Вот пример

Код: Выделить всё
Sub Main()
    Dim obj As ComboBox
    Proc(obj)
End sub

Sub Proc(obg as ComboBox)
   Stop
End Sub

Это совсем не работает, а при замене obg as ComboBox на obg as Variant, показывает, что в процедуру передаеться лишь строка типа String (Variant/String). Замена obg as ComboBox на obg as String проходит, но это совсем не то, что нужно. Причем если указать obg as ComboBox - выдает ошибку Type mismatch
Помогите, кто с таким сталкивался.

Систему переустанавливал (правда не по этой причине), однако это ничего не дало.
Явное указание наследственности отменяет полиморфизм виртуальных функций

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

Re: Передача объекта в процедуру

Сообщение Andrey Fedorov » 19.12.2005 (Пн) 10:36

tarrac писал(а):Это совсем не работает,


Неправда - это работает:

Код: Выделить всё
Private Sub Form_Load()
    Dim obj As VB.ComboBox

    Set obj = Me.Combo1
   
    obj.AddItem "Test 1"
    obj.AddItem "Test 2"
   
    Proc obj
End Sub

Sub Proc(obg As VB.ComboBox)
    Dim i As Integer
   
    For i = 0 To obg.ListCount - 1
        Debug.Print obg.List(i)
    Next i
End Sub
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

tarrac
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 14.06.2005 (Вт) 16:58

Сообщение tarrac » 19.12.2005 (Пн) 10:55

А вот так нет
Код: Выделить всё
Private Sub Form_Load()
'    Set db = New clDate
'    db.strSQL = "select * from main"
   
   
    aswq (Combo1)
End Sub
Sub aswq(ByRef a As VB.ComboBox)
   
End Sub


Combo1 на форме лежит
Явное указание наследственности отменяет полиморфизм виртуальных функций

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

Сообщение Andrey Fedorov » 19.12.2005 (Пн) 10:58

tarrac писал(а):А вот так нет
Код: Выделить всё
    aswq (Combo1)



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

tarrac
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 14.06.2005 (Вт) 16:58

Сообщение tarrac » 19.12.2005 (Пн) 11:04

Благодарю
Явное указание наследственности отменяет полиморфизм виртуальных функций

tarrac
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 14.06.2005 (Вт) 16:58

Сообщение tarrac » 19.12.2005 (Пн) 11:15

Хотя странно - это же не функция, что бы игнорировать результаты
Явное указание наследственности отменяет полиморфизм виртуальных функций

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

Сообщение alibek » 19.12.2005 (Пн) 11:37

Скобки, в данном случае, означают передачу параметра по значению (а не по ссылке).
Lasciate ogni speranza, voi ch'entrate.

tarrac
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 14.06.2005 (Вт) 16:58

Сообщение tarrac » 19.12.2005 (Пн) 11:52

Всем спасибо большое!
Явное указание наследственности отменяет полиморфизм виртуальных функций

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 20.12.2005 (Вт) 12:59

alibek писал(а):Скобки, в данном случае, означают передачу параметра по значению (а не по ссылке).

Скобки в данном случае в первую и последнюю очередь означают вычисление выражения. В частности, у КомбоБокса есть свойство по умолчанию, через которое вычисляются объекты.
Код: Выделить всё
Property _Default As String
    Default member of VB.ComboBox

А вот будет это выражение передаваться по ссылке или по значению, - это зависит от других факторов, в частности, от известности прототипа метода etc.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН


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

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

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

    TopList