Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 3 / 0
Регистрация: 17.02.2016
Сообщений: 75

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

17.02.2016, 21:32. Показов 1239. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru