|
|
|
ControlType
|
|||
|---|---|---|---|
|
#18+
2 Лох: Африка, дикие люди, однако... А вот интересно, что у Control'а есть ItemData, хотя оно нужно только для ComboBox'а и ListBox'а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 20:55 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
2 Человек из Кемерово А где мне надо было эти "производные типы" смотреть? Та там же и смотри - в Object Browser Всякие текстбоксы и т.д. Кстати, "производные" действительно надо было взять в кавычки. Дабы не вводить ортодоксов ООП в заблуждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 20:56 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч, TextBox CommandButton и т.д. (их штук 15, наверно Это я и сам знаю, я спрашивал : "Где смотреть?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 20:56 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
wara, я написал не Control, а Variant. У Variant'а тоже должны быть все мыслимые в мире свойства? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 20:56 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Блин, что-то дискуссия слишком быстро идет. Я за ней не успеваю Пойду атдахну аднака ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 20:57 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
> Это я и сам знаю, я спрашивал : "Где смотреть?" Вот у них и смотреть. Что значит где? В Object Browser'е у классов TextBox, CommandButton и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 20:58 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
ALL Куда мне ткнуть в браузере объектов, чтобы увидеть все компоненты, производные от класса Control? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 21:00 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Драсте (в ответ на ответы :) Лох, (млин!!! Если не хочешь менять ник, то хотя бы придумай себе для нас ласкательное какое-нить обращение, а то набирая эти три буквы такой внутренний дискомфорт чуйствую:) эта, спасибо за отклик по поводу "мыши"... Ежли б не ты с Феддом, то вообще пошел бы и повесился... //вываливается из дискуссии... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 21:01 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Никуда. Такой возможности нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 21:01 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Человеку из Кемерово Вот блин. Я же сказал - производные в кавычки. Нет наследования Есть интерфейсы Они то и отображаются в OB Читай теорию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 21:02 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
2 Нуф-Нуф Да не, вешаться тупо. Разве что на доску почета Хочешь я тебе чемодан прозакса привезу? Будешь вслед за King Crimson петь Prozakc Blues ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 21:04 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч Тогда откуда я должен был догадаться, что в момент обращение к контролу через класс котрол можно прочитать значение "производного" класса? Корче, чтобы программировать на Access надо быть телепатом - таков мой общий вывод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 21:05 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
wara, но ведь тот же вопрос спрашивается, если мы описываем нечто как Variant. Почему в случае с Variant'ом тебе это не мешает? Тоже надо быть телепатом. Не хочешь быть телепатом - описывай как TextBox и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 21:08 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Я торчу Однако, до появления фичи IntelliSens все программеры были телепатами Лох не... Спасибо... У меня ни слуха ни голоса нету для блюзов //точно ушел... чтобы не заторчаться до смертюги :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 21:12 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
вара, не хочу что бы ты обиделся и не хочу продолжать дискуссию и не хочу говорить элементарные (вроде) вещи и не хо... НО! И не хочу, чтобы ты думал и говорил (!!!) кому-нибудь, что Акс - дуст... Даже не Акс, а ВБА в целом! Тот список, который тебе вываливается после "точки" - это всего-лишь подспорье, возможная помощь программеру. На счет ТЕЛЕПАТОВ - это было круто! Чес.слово!!! Ты зачем написал "Dim ctl As Control"? Просто так угадал? Стелепатировал? Имхо нет. Ты написал это потому что знаешь, что такое дим и зачем вообще эта строка. А зачем ты написал "Set"? Тоже телепатия? Так вот и с этими долбаными свойствами - программист, прежде чем работать с объектами должен З_Н_А_Т_Ь их свойства и методы. Не телепатировать, а ЗНАТЬ!!! Control не является, ну как бы это сказать, самостоятельным объектом - это некий абстрактный контейнер. Контейнером для конкретных объектов! У него вообще, в принципе свойств не должно быть... А ОбжектБроузер и выпадающий список - просто в помощь. Через них нельзя программировать, а только можно ускорять написание программы (за счет меньшего нажатия клавиш). И если ты не ЗНАЕШЬ свойств и методов объектов, с которыми собираешься работать, то КАК ты вообще собираешься работать? Всем пока... //точно-при-точно соскачил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 21:27 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Нуф-нуф, Может ты меня еще в угол поставишь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 21:37 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Ну, с новыми силами.... Все таки вопрос хороший Если описываем что-то как объект, реализующий конкретный интерфейс (Dim blablabla As SomeObject), то должно применятся раннее связывание. При попытке обращения к методу, который не описан в библиотеке типов - должна быть ошибка на этапе компиляции. Если описываем что-то как Object (или Variant), то должно применятся позднее связывание. Вызвать можно что угодно, при компиляции ошибок не будет, будут ошибки времени выполнения. Есть Control. Control - имя интерфейса. В нем есть методы и св-ва. Есть TextBox. TextBox - имя интерфейса. В нем есть методы и св-ва. Оба находятся в одной библиотеке. Описания обоих - в одной библиотеке типов. С точки зрения COM - одна фигня. Братья близнецы однояйцевые. Почему в таком куске кода: Код: plaintext 1. 2. 3. при компиляции выдается ровно одна ошибка? а не две? и не ноль? Аналогично Код: plaintext 1. 2. 3. Знатоки COM! Ответьте мне, какое ключевое слово я пропустил при изучении этой технологии??? Где зарыта разница в описании интерфейсов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 22:04 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Я не знаток, но я не понял. (Ух, как прозвучало... Надо записать.) Я не понял, в чем вопрос. По-моему, на нашем уровне все объяснимо. 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), то компайлер до момента позднего связывания не проверяет ничего, ибо отсутствие свойства в интерфейсе еще не означает, что этого свойства так и не будет у того объекта, на который во время исполнения сошлется наша переменная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 23:56 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Лох, эта, по поводу твоего примера от вчера 22:04... Представь, что в одной из форм есть такой код: Код: plaintext 1. 2. Ну прикинь, ежли б компилятор выдавал ошибку и на Form , то я указав в переменной данную форму один хрен не смог бы обратиться к этому ее свойству (huy), которое отсутствует у других форм, но у одной я сам его прописал. Ошибка во время компиляции и все на этом... А если указана Form_blablabla , то компилер туда может сразу заглянуть и проверить, есть ли там такое... //топик напоминает старый добрый анекдот про программера и шампунь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 08:41 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
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. 2 All Пробую переформулировать вопрос Как нужно описать интерфейс Control (или Form), чтобы VB вел себя следующим образом: Если обращаемся к методу, присутствующему в описании Control (в библиотеке типов), то направлять этот метод собственно интерфейсу (используя раннее связывание) Если обращаемся к методу, отсутствующему в описании Control, то перенаправляем этот метод интерфейсу IDispatch (позднее связывание) ????? Похожий механизм исползуется при агрегации объектов (в реализации IUnkown::QueryInterface), но применяется к интерфейсам целиком, а не к отдельным методам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 09:18 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Поправочки и пояснения к предыдущему посту 2 Саныч И Control, и TextBox - суть интерфейсы. Могут присутствовать у одного и того же объекта. Взяли у объекта интерфейс Control - работает с ним как с контролом, взяли интерфейс TextBox - работаем как с текстбоксом. Но поведение VB (на этапе компиляции) различается в случае если мы работает с объектом как с контролом или как с текстбоксом. Почему? Видимо потому, что в интерфейсах есть какое-то принципиальное отличие, но как оно называется (и на что еще влияет) я не знаю. 2 Нуф-Нуф Примерчик не совсем корректный. "Debug.Print frm.Huy" при компиляции не ругается, но ругается при выполнении. Что еще больше запутывает ситуацию. Выходит, тут даже не позднее связывание, ибо IDispatch для объекта один, и должен успешно отрабатывать вызом метода (Class1.Huy()) независимо от того, к какому интерфейсу он принадлежит. Это можно подтвердить добавив в конец строчки Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 09:43 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Ау! Аль перевелись бухатыри на Руси? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 12:14 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Сова, открывай, медведь пришел. Лох, привет. На мой взгляд (собсаря, я это и имел в виду, но невнятно изъяснился), дело вот в чем. TextBox и Form_Форма1 - это непосредственно то, чем данный объект является. Называй хоть классом, хоть интерфейсом. (Кстати, у класса тоже есть свой интерфейс, сиречь список его свойств и методов, включая синтаксис обращения к ним.) По описанию TextBox и Form_Форма1, содержащемуся соответственно в компайлере и в файле mdb, компайлер однозначно и полностью видит весь интерфейс объекта и знает, что с этим объектом можно делать (кроме списка контролов формы, который на этапе компиляции не проверяется, если писать через !). С другой стороны, Form, Control, Object и Variant - это всего лишь некие кусочки интерфейса объекта либо даже менее того. Объект, описанный как TextBox, поддерживает весь интерфейс Control'а и плюс что-то свое. Но объект, описанный как просто Control, - это нонсенс, его можно описать, но с ним ничего нельзя сделать, пока он не сослан на конкретный TextBox и т.п. А попытка описать что-то As New Object вообще обречена - строчка красится красным. Именно поэтому у таких переменных компайлер знает только то, что он ничего не знает, и оставляет проверку синтаксиса до момента связывания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 14:37 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Медведь, ховайся в бульбу. Ща разорву на тысячу маленьких медвежат 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 не найдя метод в библиотеке типов не ругался при компиляции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 15:47 |
|
||
|
ControlType
|
|||
|---|---|---|---|
|
#18+
Мммммммм... Лох, ты меня ввел в задумчивость. > > 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 не найдя метод в библиотеке типов не ругался при компиляции? Не факт, что это существует. Все юзерские интерфейсы с точки зрения этого свойства одинаковы. Вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 19:14 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32199090&tid=1679439]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 374ms |

| 0 / 0 |
