powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ControlType
25 сообщений из 98, страница 2 из 4
ControlType
    #32199075
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Лох:

Африка, дикие люди, однако... А вот интересно, что у Control'а есть ItemData, хотя оно нужно только для ComboBox'а и ListBox'а.
...
Рейтинг: 0 / 0
ControlType
    #32199076
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Человек из Кемерово
А где мне надо было эти "производные типы" смотреть?
Та там же и смотри - в Object Browser
Всякие текстбоксы и т.д.
Кстати, "производные" действительно надо было взять в кавычки. Дабы не вводить ортодоксов ООП в заблуждение.
...
Рейтинг: 0 / 0
ControlType
    #32199077
Фотография wara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
TextBox
CommandButton
и т.д. (их штук 15, наверно

Это я и сам знаю, я спрашивал : "Где смотреть?"
...
Рейтинг: 0 / 0
ControlType
    #32199080
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
wara, я написал не Control, а Variant. У Variant'а тоже должны быть все мыслимые в мире свойства?
...
Рейтинг: 0 / 0
ControlType
    #32199081
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, что-то дискуссия слишком быстро идет.
Я за ней не успеваю
Пойду атдахну аднака
...
Рейтинг: 0 / 0
ControlType
    #32199083
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Это я и сам знаю, я спрашивал : "Где смотреть?"

Вот у них и смотреть. Что значит где? В Object Browser'е у классов TextBox, CommandButton и т.д.
...
Рейтинг: 0 / 0
ControlType
    #32199085
Фотография wara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALL
Куда мне ткнуть в браузере объектов, чтобы увидеть все компоненты, производные от класса Control?
...
Рейтинг: 0 / 0
ControlType
    #32199087
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Драсте (в ответ на ответы :)

Лох, (млин!!! Если не хочешь менять ник, то хотя бы придумай себе для нас ласкательное какое-нить обращение, а то набирая эти три буквы такой внутренний дискомфорт чуйствую:) эта, спасибо за отклик по поводу "мыши"... Ежли б не ты с Феддом, то вообще пошел бы и повесился...

//вываливается из дискуссии...
...
Рейтинг: 0 / 0
ControlType
    #32199088
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Никуда. Такой возможности нет.
...
Рейтинг: 0 / 0
ControlType
    #32199089
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Человеку из Кемерово
Вот блин. Я же сказал - производные в кавычки.
Нет наследования
Есть интерфейсы
Они то и отображаются в OB
Читай теорию.
...
Рейтинг: 0 / 0
ControlType
    #32199090
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Нуф-Нуф
Да не, вешаться тупо. Разве что на доску почета
Хочешь я тебе чемодан прозакса привезу? Будешь вслед за King Crimson петь Prozakc Blues
...
Рейтинг: 0 / 0
ControlType
    #32199092
Фотография wara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч
Тогда откуда я должен был догадаться, что в момент обращение к контролу через класс котрол можно прочитать значение "производного" класса? Корче, чтобы программировать на Access надо быть телепатом - таков мой общий вывод.
...
Рейтинг: 0 / 0
ControlType
    #32199093
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
wara, но ведь тот же вопрос спрашивается, если мы описываем нечто как Variant. Почему в случае с Variant'ом тебе это не мешает? Тоже надо быть телепатом. Не хочешь быть телепатом - описывай как TextBox и т.п.
...
Рейтинг: 0 / 0
ControlType
    #32199094
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я торчу
Однако, до появления фичи IntelliSens все программеры были телепатами

Лох не... Спасибо... У меня ни слуха ни голоса нету для блюзов
//точно ушел... чтобы не заторчаться до смертюги :)
...
Рейтинг: 0 / 0
ControlType
    #32199101
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вара, не хочу что бы ты обиделся и не хочу продолжать дискуссию и не хочу говорить элементарные (вроде) вещи и не хо... НО! И не хочу, чтобы ты думал и говорил (!!!) кому-нибудь, что Акс - дуст... Даже не Акс, а ВБА в целом!
Тот список, который тебе вываливается после "точки" - это всего-лишь подспорье, возможная помощь программеру.
На счет ТЕЛЕПАТОВ - это было круто! Чес.слово!!! Ты зачем написал "Dim ctl As Control"? Просто так угадал? Стелепатировал? Имхо нет. Ты написал это потому что знаешь, что такое дим и зачем вообще эта строка. А зачем ты написал "Set"? Тоже телепатия? Так вот и с этими долбаными свойствами - программист, прежде чем работать с объектами должен З_Н_А_Т_Ь их свойства и методы. Не телепатировать, а ЗНАТЬ!!!
Control не является, ну как бы это сказать, самостоятельным объектом - это некий абстрактный контейнер. Контейнером для конкретных объектов! У него вообще, в принципе свойств не должно быть...
А ОбжектБроузер и выпадающий список - просто в помощь. Через них нельзя программировать, а только можно ускорять написание программы (за счет меньшего нажатия клавиш). И если ты не ЗНАЕШЬ свойств и методов объектов, с которыми собираешься работать, то КАК ты вообще собираешься работать?

Всем пока...
//точно-при-точно соскачил...
...
Рейтинг: 0 / 0
ControlType
    #32199104
Фотография wara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нуф-нуф,
Может ты меня еще в угол поставишь?
...
Рейтинг: 0 / 0
ControlType
    #32199108
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, с новыми силами....
Все таки вопрос хороший

Если описываем что-то как объект, реализующий конкретный интерфейс (Dim blablabla As SomeObject), то должно применятся раннее связывание. При попытке обращения к методу, который не описан в библиотеке типов - должна быть ошибка на этапе компиляции.
Если описываем что-то как Object (или Variant), то должно применятся позднее связывание. Вызвать можно что угодно, при компиляции ошибок не будет, будут ошибки времени выполнения.

Есть Control. Control - имя интерфейса. В нем есть методы и св-ва.
Есть TextBox. TextBox - имя интерфейса. В нем есть методы и св-ва.
Оба находятся в одной библиотеке. Описания обоих - в одной библиотеке типов.
С точки зрения COM - одна фигня. Братья близнецы однояйцевые.

Почему в таком куске кода:
Код: plaintext
1.
2.
3.
    Dim ctl As Control
    Debug.Print ctl.huy
    Dim tbx As TextBox
    Debug.Print tbx.huy

при компиляции выдается ровно одна ошибка? а не две? и не ноль?
Аналогично
Код: plaintext
1.
2.
3.
    Dim frm As Form
    Debug.Print frm.huy
    Dim frm1 As Form_Форма1
    Debug.Print frm1.huy


Знатоки COM! Ответьте мне, какое ключевое слово я пропустил при изучении этой технологии??? Где зарыта разница в описании интерфейсов?
...
Рейтинг: 0 / 0
ControlType
    #32199134
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я не знаток, но я не понял. (Ух, как прозвучало... Надо записать.) Я не понял, в чем вопрос. По-моему, на нашем уровне все объяснимо.

1. TextBox и Form_Форма1 - это конкретные классы, у которых есть известно какие свойства и методы.

(Кстати, между ними есть разница: сисок контролов Form_Форма1 на этапе компиляции известен не полностью, поэтому я могу написать

Dim f As New Form_Форма1
f!MyTextBox = 1

и это пройдет компиляцию, даже если контрола по имени MyTextBox на этой форме нет. А вот

f.MyTextBox = 1

пройдет только при условии, что такой контрол либо свойство есть. Короче, я отвлекся.)

2. Супротив тому, Form, Control, Object и Variant - это не конкретные классы, а, как ты сам и сказал, только интерфейсы. Когда создается объект, он всегда будет не просто Form, Control, Object или Variant, а нечто конкретное. (Если на меня надавить, я уберу из этого списка Variant, но это ничего не изменит в ходе рассуждений.)

3. Теперь так. Если мы описываем переменную сразу как объект конкретного класса (1), то компайлер знает, чтО ему нужно проверять, ибо у него есть список свойств и методов этого класса. (Да и то вот список контролов формы может меняться динамически, поэтому синтаксис с ! на этапе компиляции не проверяется.) Ежели же мы ее описываем как некий интерфейс (2), то компайлер до момента позднего связывания не проверяет ничего, ибо отсутствие свойства в интерфейсе еще не означает, что этого свойства так и не будет у того объекта, на который во время исполнения сошлется наша переменная.
...
Рейтинг: 0 / 0
ControlType
    #32199224
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох, эта, по поводу твоего примера от вчера 22:04...

Представь, что в одной из форм есть такой код:
Код: plaintext
1.
2.
Public Property get huy() as Loooooooong
huy =  150  'длинна в сантиметрах' :)
End Property

Ну прикинь, ежли б компилятор выдавал ошибку и на Form , то я указав в переменной данную форму один хрен не смог бы обратиться к этому ее свойству (huy), которое отсутствует у других форм, но у одной я сам его прописал. Ошибка во время компиляции и все на этом...
А если указана Form_blablabla , то компилер туда может сразу заглянуть и проверить, есть ли там такое...

//топик напоминает старый добрый анекдот про программера и шампунь
...
Рейтинг: 0 / 0
ControlType
    #32199245
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
TextBox и Form_Форма1 - это конкретные классы
Хрен там. Это конкретные интерфейсы, а никак не классы.
Есть некий объект. Он реализует кучу интерфейсов - IUnkown, IDispatch, Control, TextBox и еще кучу всякой срани.
Так почему если мы берем у этого объекта интерфейс TextBox, то мы можем вызывать только те методы, которые в этом интерфейсе присутствуют, а если мы у того же объекта берем интерфейс Control, то вызываем все что угодно, независимо от того, есть оно в определении интерфейса или нет?

2 Нуф-Нуф
Я могу у формы прописать интерфейс явно. Т.е. сделать класс Class1 с методом "public function Huy() As String". В форме1 прописать "Implements Class1". И даже эту функцию туда написать.
После чего
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim frm As Form ' Метод есть, но компилятор об этом не знает'
Set frm = New Form_Форма1 
Debug.Print frm.Huy ' Ошибки нет '

Dim frm1 As Form_Форма1' Метод есть, и компилятор об этом знает (если хочет) '
Set frm1 = frm ' Объект тот же самый '
Debug.Print frm1.Huy ' Но ошибка есть '
Debug.Print frm1.Class1_Huy ' И так тоже есть ошибка '

Dim cls as Class1 ' Метод есть, компилятор об этом знает'
Set cls = frm1 ' объект тот же самый '
Debug.Print cls.Huy ' но ошибки нет' 


2 All
Пробую переформулировать вопрос
Как нужно описать интерфейс Control (или Form), чтобы VB вел себя следующим образом:
Если обращаемся к методу, присутствующему в описании Control (в библиотеке типов), то направлять этот метод собственно интерфейсу (используя раннее связывание)
Если обращаемся к методу, отсутствующему в описании Control, то перенаправляем этот метод интерфейсу IDispatch (позднее связывание)
?????
Похожий механизм исползуется при агрегации объектов (в реализации IUnkown::QueryInterface), но применяется к интерфейсам целиком, а не к отдельным методам.
...
Рейтинг: 0 / 0
ControlType
    #32199260
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправочки и пояснения к предыдущему посту

2 Саныч
И Control, и TextBox - суть интерфейсы. Могут присутствовать у одного и того же объекта. Взяли у объекта интерфейс Control - работает с ним как с контролом, взяли интерфейс TextBox - работаем как с текстбоксом.
Но поведение VB (на этапе компиляции) различается в случае если мы работает с объектом как с контролом или как с текстбоксом. Почему? Видимо потому, что в интерфейсах есть какое-то принципиальное отличие, но как оно называется (и на что еще влияет) я не знаю.

2 Нуф-Нуф
Примерчик не совсем корректный. "Debug.Print frm.Huy" при компиляции не ругается, но ругается при выполнении. Что еще больше запутывает ситуацию. Выходит, тут даже не позднее связывание, ибо IDispatch для объекта один, и должен успешно отрабатывать вызом метода (Class1.Huy()) независимо от того, к какому интерфейсу он принадлежит. Это можно подтвердить добавив в конец строчки
Код: plaintext
1.
2.
3.
Dim obj As Object ' Ну здесь уж точно позднее связывание '
Set obj = cls ' Объект тот же самый'
Debug.Print obj.huy() ' и обшибки нет, ни при компиляции, ни при выполнении'
...
Рейтинг: 0 / 0
ControlType
    #32199502
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ау!
Аль перевелись бухатыри на Руси?
...
Рейтинг: 0 / 0
ControlType
    #32199747
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сова, открывай, медведь пришел. Лох, привет. На мой взгляд (собсаря, я это и имел в виду, но невнятно изъяснился), дело вот в чем.

TextBox и Form_Форма1 - это непосредственно то, чем данный объект является. Называй хоть классом, хоть интерфейсом. (Кстати, у класса тоже есть свой интерфейс, сиречь список его свойств и методов, включая синтаксис обращения к ним.) По описанию TextBox и Form_Форма1, содержащемуся соответственно в компайлере и в файле mdb, компайлер однозначно и полностью видит весь интерфейс объекта и знает, что с этим объектом можно делать (кроме списка контролов формы, который на этапе компиляции не проверяется, если писать через !).

С другой стороны, Form, Control, Object и Variant - это всего лишь некие кусочки интерфейса объекта либо даже менее того. Объект, описанный как TextBox, поддерживает весь интерфейс Control'а и плюс что-то свое. Но объект, описанный как просто Control, - это нонсенс, его можно описать, но с ним ничего нельзя сделать, пока он не сослан на конкретный TextBox и т.п. А попытка описать что-то As New Object вообще обречена - строчка красится красным. Именно поэтому у таких переменных компайлер знает только то, что он ничего не знает, и оставляет проверку синтаксиса до момента связывания.
...
Рейтинг: 0 / 0
ControlType
    #32199851
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Медведь, ховайся в бульбу. Ща разорву на тысячу маленьких медвежат

TextBox и Form_Форма1 - это непосредственно то, чем данный объект является
Нет. Это только одна из граней объекта. В примере, данным Нуф-Нуфу Форма1 являлась еще и Class1.
По описанию TextBox и Form_Форма1, содержащемуся соответственно в компайлере и в файле mdb, компайлер однозначно и полностью видит весь интерфейс объекта и знает...
Нет. Неоднозначно и не полностью. См. пример Нуф-Нуфу и поправку.
По описанию TextBox компилятор однозначно и полностью видит только интерфейс TextBox. По описанию Control компилятор однозначно и полностью видит только интерфейс Control. Только для контрола то, что он (компилятор) не видит - он почему то отправляет в IDispatch, а для текстбокса - нет.
Form, Control, Object и Variant - это всего лишь некие кусочки интерфейса
Это полноценные интерфейсы. Просто одна из граней объекта. Не единственная, ну так и TextBox тоже не один у объекта.
А попытка описать что-то As New Object вообще обречена
Любой объект можно описать как Public Not Createble (в VB), и его тоже нельзя будет создать через New. DAO.Recordset тому пример. Ты ведь не будешь утверждать, что DAO.Recordset не существует, раз его нельзя создать руками?
Объект, описанный как TextBox, поддерживает весь интерфейс Control'а и плюс что-то свое
Нет. Это было бы наследование, а его нихт. Объект может поддерживать интерфейс TextBox, интерфейс Control и что угодно еще. Методы в разных интерфейсах могут даже называться одинакого, ну и что с того? Ты ведь не скажешь, что ADO.Recordset - это DAO.Recordset плюс что-то свое? А методы у них одинакого называются многие.
Но объект, описанный как просто Control, - это нонсенс, его можно описать, но с ним ничего нельзя сделать
Объект, описанный как TextBox - тоже нонсенс. Его тоже можно описать, но ничего с ним нельзя сделать, пока он не сослан на конкретный TextBox. Или даже на некий объект, который может быть чем угодно, при условии что он еще и текстбокс.

Я не тупой. Я прекрасно понимаю, что интерфейсы отличаются. Но чем?
Дайте мне ключевое слово. Я по нему чего-нибудь да найду.
Слова "конкретный экземпляр, компилятор видит все св-ва, и т.п." не катят. Потому как надо "конкретный интерфейс" (Form_Форма1), "компилятор видит все методы этого интерфейса" (function huy()). Ну так и Form - конкретый интерфейс. И компилятор тоже видит все его методы.
Почему два интерфейса ведут себя по разному? Причем на этапе компиляции . На этапе выполнения хрен бы с ним - как написан объект, так он себя и ведет, но как интерфейсу удается сказать компилятору, что он ни хера не интерфейс, а так, херня какая-то? Типа что в нем не нашли - то может быть есть где-нибудь еще, ищете в IDispatch.

Если я хочу сделать такое же на VB (VC) какое слово я должен искать в словаре? Типа делаю я свой класс. Причем есть другие классы, реализующие его интерфейс. Ну и, разумеется, свои собственные интерфейсы. Что нужно сделать, чтобы язык типа VB не найдя метод в библиотеке типов не ругался при компиляции?
...
Рейтинг: 0 / 0
ControlType
    #32200028
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Мммммммм... Лох, ты меня ввел в задумчивость.

> > TextBox и Form_Форма1 - это непосредственно то, чем данный объект является
> Нет. Это только одна из граней объекта. В примере, данным Нуф-Нуфу Форма1 являлась еще и Class1.

Это не "еще и". Я провожу разницу между окончательным классом (или полным интерфейсом) и кусочками интерфейса. Если переменная описана как кусочек, то ошибок компиляции выдается меньше. Class1 - это кусочек Формы1.

> Dim frm1 As Form_Форма1' Метод есть, и компилятор об этом знает (если хочет) '
> Set frm1 = frm ' Объект тот же самый '
> Debug.Print frm1.Huy ' Но ошибка есть '

Это значит, что Implements вообще не работает. Правильно ли я тебя понял?

> По описанию TextBox компилятор однозначно и полностью видит только интерфейс TextBox. По описанию Control компилятор однозначно и полностью видит только интерфейс Control. Только для контрола то, что он (компилятор) не видит - он почему то отправляет в IDispatch, а для текстбокса - нет.

Потому что Control - это кусочек, требующий конкретизации. А TextBox - это окончательный интерфейс, который весь может быть проверен на этапе компиляции.

> > Form, Control, Object и Variant - это всего лишь некие кусочки интерфейса
> Это полноценные интерфейсы. Просто одна из граней объекта. Не единственная, ну так и TextBox тоже не один у объекта.

Что значит TextBox тоже не один?

> Любой объект можно описать как Public Not Createble (в VB), и его тоже нельзя будет создать через New.

OK.

> > Объект, описанный как TextBox, поддерживает весь интерфейс Control'а и плюс что-то свое
> Нет. Это было бы наследование, а его нихт.

Это не наследование, а просто интерфейс TextBox'а написан так, что он включает в себя интерфейс Control'а. Это было бы наследование, если бы Control включал полные описания всех своих свойств и методов, тогда как он включает только их шапки.

> Объект может поддерживать интерфейс TextBox, интерфейс Control и что угодно еще.

Но обрати внимание, что "интерфейс Control и что угодно еще" обязательно является подмножеством интерфейса TextBox.

> Методы в разных интерфейсах могут даже называться одинакого, ну и что с того? Ты ведь не скажешь, что ADO.Recordset - это DAO.Recordset плюс что-то свое? А методы у них одинакого называются многие.

Пример не принят, потому что DAO.Recordset - не просто интерфейс, а класс с описанными методами.

> Объект, описанный как TextBox - тоже нонсенс. Его тоже можно описать, но ничего с ним нельзя сделать, пока он не сослан на конкретный TextBox.

Но это ничего не меняет с точки зрения того, какими его свойствами и методами разрешено пользоваться.

> Или даже на некий объект, который может быть чем угодно, при условии что он еще и текстбокс.

Это как это? Ты можешь добавить к текстбоксу свои свойства и методы? Всё его "что угодно" - это только то, что входит в стандарт TextBox'а.

> Потому как надо "конкретный интерфейс" (Form_Форма1), "компилятор видит все методы этого интерфейса" (function huy()). Ну так и Form - конкретый интерфейс. И компилятор тоже видит все его методы.

Разница в том, что у интерфейса Form могут оказаться свойства и методы, неизвестные на этапе компиляции.

> но как интерфейсу удается сказать компилятору, что он ни хера не интерфейс, а так, херня какая-то?

Поскольку и Form, и Control - это интерфейсы, созданные не юзером, то компилятор просто знает, что именно эти интерфейсы таковы. Все интерфейсы, созданные юзером, считаются полными, потому что во время исполнения программы у них не могут возникать новые свойства и методы, за исключением изменений в коллекции Controls.

> Что нужно сделать, чтобы язык типа VB не найдя метод в библиотеке типов не ругался при компиляции?

Не факт, что это существует. Все юзерские интерфейсы с точки зрения этого свойства одинаковы.

Вот.
...
Рейтинг: 0 / 0
25 сообщений из 98, страница 2 из 4
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ControlType
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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