2 / 3 / 0
Регистрация: 17.02.2016
Сообщений: 75

Создание и работа класса

17.02.2016, 21:32. Показов 1268. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня или ночи знатокам! Помогите в проблеме!
Я новичок в ООП и VB и хотелось бы понять принцип работы классов на примере
статьи, которые я нашел в сети(http://www.codenet.ru/progr/vbasic/vb_objects.php ), где объясняется суть класса на простом примере, который приведен ниже. Я постарался в точности воспроизвести пример из статьи (за исключением некоторых своих безобидных вставок в целя трассировки)и при его прогоне выплывает ошибка(метод или член данных не найден), т.е. в Form2 этого свойства нет, а почему? Я где то ошибся или ошибка в статье? Спасибо!




------------------------ Form1 -----------------------
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Private Sub Form_Initialize()
     MsgBox "Initialize1"
End Sub
 
Private Sub Form_Load()
Dim i As Integer
 
Dim obj As New MyFirstClass
 
obj.A = 10
i = obj.A
 
obj.AA
i = obj.A
j = obj.AAA(i)
End Sub
 
‘Вторая  форма, и на ней 2 кнопки, и код
------------------------ Form2 -----------------------
Option Explicit
Dim obj As New Form1
 
Private Sub cmdCenter_Click()
    obj.Center = True
      'obj. = True
End Sub
 
Private Sub cmdNonCenter_Click()
   obj.Center = False
End Sub
 
Private Sub Form_Initialize()
  MsgBox "Initialize2"
End Sub
 
Private Sub Form_Load()
     obj.Show
     obj.Left = 500
     obj.Top = 1000
 
End Sub
 
------------------------ MyFirstClass -----------------------
Public A As Integer
Dim MyTop As Long
Dim MyLeft As Long
Dim blnCenter As Boolean
Public Sub AA()
  MsgBox "aa"
End Sub
Public Function AAA(p As Integer) As Integer
  MsgBox "aaa"
  AAA = 5 + p
End Function
Public Property Get Center() As Boolean
   Center = blnCenter
End Property
 
Public Property Let Center(ByVal vNewValue As Boolean)
      blnCenter = vNewValue
      If blnCenter Then
      MyTop = Me.Top
     MyLeft = Me.Left
     Me.Top = (Screen.Height - Me.Height) / 2
     Me.Left = (Screen.Width - Me.Width) / 2
Else
     Me.Top = MyTop
     Me.Left = MyLeft
     End If
 
End Property
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2016, 21:32
Ответы с готовыми решениями:

Работа с классами: создание нескольких экземпляров класса
В общем в ActionScript 3 неочень. Ситуацыя такова: Мне нужно игру на флеше написать(суть игры в том чтоб мышкой заганять мух в...

Создание экземпляра класса-наследника для переменной с типом базового класса
Подскажите чайнику как создается экземпляр класса BC BaseClass BC = new DerivedClass(); Вопрос: BC - это экземпляр класса BaseClass...

Явное создание экземпляра класса и явная специализация шаблона класса
Всем добрый день! Не могу разобраться - эти две технологии дают один и тот же результат? В каких случаях применять одно и другое?...

9
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
18.02.2016, 16:22
Цитата Сообщение от TransGet Посмотреть сообщение
Dim obj As New Form1
- здесь ты объявляешь obj формой, у нее нет свойства
Center.
Цитата Сообщение от TransGet Посмотреть сообщение
obj.Center = True
0
2 / 3 / 0
Регистрация: 17.02.2016
Сообщений: 75
18.02.2016, 18:02  [ТС]
--- CRIDEL
т.е. ты хочешь сказать, что в статье(http://www.codenet.ru/progr/vbasic/vb_objects.php) ошибка? И как же все таки этот пример заставить работать?
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
18.02.2016, 18:31
Цитата: Хочу сразу предупредить - то что вы будете читать здесь - ни в коем случае не является академическим описанием объектно ориентированного программирования. Более того - это нельзя назвать даже нормальной учебной статьей. То о чем я буду писать вероятнее всего уже вам знакомо, или вы обо всем этом догадывались.

Цитата Сообщение от TransGet Посмотреть сообщение
И как же все таки этот пример заставить работать?
Понятия не имею, код, на мой взгляд-бредовый, ищите статьи которые помогут понять именно вам, их-миллионы!

Добавлено через 5 минут
https://msdn.microsoft.com/ru-... a85tz.aspx
0
2 / 3 / 0
Регистрация: 17.02.2016
Сообщений: 75
18.02.2016, 19:36  [ТС]
--- CRIDEL
Ладно, спасибо за участие! Грешным делом думал, раз эту статью рекламировали в сети, значит там все правильно и работает! Буду искать дальше.
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
21.02.2016, 21:01
Цитата Сообщение от TransGet Посмотреть сообщение
Грешным делом думал, раз эту статью рекламировали в сети, значит там все правильно и работает!
Работает!Вы не поняли,что пытался вам показать автор.Он привел пример как добавить новое свойство в уже существующий объект.Форма это объект,но свойства Center в нем не существует.
Попытаюсь объяснить,как я понимаю.
Открываем форму и считаем,что это наш новый класс,его уже описали до нас.Нам остается добавить свои свойства этого уже описанного класса.Для этого заходим в меню Tools Бэйсика "Add Procedure", надписать Center, пометить Property и Public. После Ok.Появятся заготовки процедур.Пишем в них свой код.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Option Explicit
Dim MyTop As Long
Dim MyLeft As Long
Dim blnCenter As Boolean
 
 
Public Property Get Center() As Boolean
     Center = blnCenter
End Property
 
Public Property Let Center(ByVal vNewValue As Boolean)
      blnCenter = vNewValue
      If blnCenter Then
      MyTop = Me.Top
     MyLeft = Me.Left
     Me.Top = (Screen.Height - Me.Height) / 2
     Me.Left = (Screen.Width - Me.Width) / 2
Else
     Me.Top = MyTop
     Me.Left = MyLeft
     End If
End Property
Все.Теперь можно эту форму считать как бы новым классом с новым свойством Center все остальные остаются без изменений.Но увидеть это свойство на этой форме мы уже не сможем,чтобы увидеть наше новое свойство нужен объект типа нашего новоиспеченного как бы класса.(Для себя считаем эту форму модулем класса)
В меню "Проект" добавляем новую форму, она и будет нашей рабочей формой поэтому в свойствах проекта ее и нужно поставить первой при запуске проекта.
Пишем код для этой формы, не забывая в свойствах Name указать как в коде.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit
Dim obj As New Form1
 
Private Sub cmdCenter_Click()
     obj.Center = True
End Sub
 
Private Sub cmdNonCenter_Click()
     obj.Center = False
End Sub
 
 
Private Sub Form_Load()
     obj.Show
     obj.Left = 500
     obj.Top = 1000
End Sub
Все.Запускаем проект на исполнение и наслаждаемся своим новым свойством.
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
23.02.2016, 19:56
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Цитата Сообщение от Genn55 Посмотреть сообщение
Но увидеть это свойство на этой форме мы уже не сможем,чтобы увидеть наше новое свойство нужен объект типа нашего новоиспеченного как бы класса.
Неправда. Новое свойство видно из того же модуля формы. Необязательно для этого создавать новый экземпляр.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit
 
Private isCenter As Boolean
 
Public Property Get Center() As Boolean
    bCenter = isCenter
End Property
 
Public Property Let Center(ByVal bCenter As Boolean)
    isCenter = bCenter
    If bCenter Then
        Top = (Screen.Height - Me.Height) \ 2
        Left = (Screen.Width - Me.Width) \ 2
    End If
End Property
 
Private Sub Form_Load()
    Me.Center = True
End Sub
В статье просто решили показать, как создавать новый экземпляр.
Поверьте, не стоило начинать изучение классов с этой статьи. Класс нужно учится строить с нуля, а не с добавления собственных свойств к готовой неявной реализации в объекте "Форма".

Кроме того, класс - это понятие гораздо большее, чем из него может "выжать" VB6.
Инкапсуляция, наследование, полиморфизм. Последние 2 VB6 не умеет. Разве что (на сколько мне известно), наследование интерфейсов, но это из другой оперы.
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
25.02.2016, 20:41
Цитата Сообщение от TransGet Посмотреть сообщение
И как же все таки этот пример заставить работать?
Моя попытка показать,что пример все таки работает.
Dragokas мне конечно до Вас как до луны пешком,я только постигаю основы VB6. И с Вами я полностью солидарен,начинать надо с начала и не с этой статьи.
Но с другой стороны этот пример,на мой взгляд конечно,можно рассматривать как наследование интерфейсов.
Я понял так.Возможно я и не прав.
0
25.02.2016, 22:15

Не по теме:

Ну не нужно так иронизировать. Может, я и не прав на счет цели автора. Я на самом деле не сильно хорошо разбираюсь в данной теме, поэтому сразу и полез тестировать, т.к. ранее не видел приведенного в статье способа.

Интересная статья на счет наследования классов и интерфейсов.

0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
25.02.2016, 23:52
Цитата Сообщение от Dragokas Посмотреть сообщение
Ну не нужно так иронизировать

Не по теме:

Честное слово даже и не собирался,я действительно новичок и ценю ваше мнение.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.02.2016, 23:52
Помогаю со студенческими работами здесь

Создание класса-списка на основе кода со списком без класса
Здравствуйте. Не могли бы вы показать, как оформить этот код в виде класса. Смысл задания: это засунуть в список большое число(здесь я...

Создание своего класса кнопки с использованием наследования от класса UserControl
Ребят, помогите, такая проблема: создаю класс MyButton в C# при помощи наследования от класса UserControl и в классе MyButton переопределяю...

Создание экземпляра класса, имя класса находиться в строковой переменной
Подскажите люди добрые, как можно выйти из такой ситуации, вот допустим имеются классы class new1{ . . . } class new2{ . . ...

Построение описания класса, создание и уничтожение объектов этого класса
Построить описание класса, содержащего информацию о почтовом адресе организации. Предусмотреть возможность раздельного изменения...

Возможно ли создание объекта шаблонного класса в функции этого класса?
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон контейнера (множество) с операциями...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru