Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787

Property Let и Get с параметрами

24.10.2015, 22:54. Показов 2819. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток!Пожалуйста помогите разобраться.
Есть свой класс clsEnter что то делает.Переменные Private.
Присваиваю
Visual Basic
1
2
3
4
5
6
7
Public Property Get DoubMin() As Double ' Возвращает значение свойства минимально допустимого числа
 DoubMin = dblMin
End Property
 
Public Property Let DoubMin(ByVal NewValue As Double) ' Устанавливает значение свойства минимально допустимого числа
dblMin = NewValue
End Property
Все нормально. Пробую так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Public Property Get SummaInt() As Long
SummaInt = intSummaN
End Property
 
Public Property Set SummaInt(ByVal L As ListBox)
Dim i As Integer, N As Long
N = 0
For i = 0 To L.ListCount - 1
    N = N + Val(Right$(L.List(i), 3))
Next
intSummaN = N
End Property
Работает.Пробую добавить параметры
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Property Get SummaDoub(Optional Y As Boolean = True) As Double
 
SummaDoub = dblSummaS
End Property
 
Public Property Let SummaDoub(Y As Boolean, ByVal L As ListBox)
Dim i As Integer, S As Double
S = 0
 
For i = 0 To L.ListCount - 1
    If Y Then
    S = S + F(Val(Left$(L.List(i), 6))) * Val(Right$(L.List(i), 3))
    Else
    S = S + Val(Left$(L.List(i), 6)) * Val(Right$(L.List(i), 3))
    End If
 
Next
dblSummaS = S
End Property
Не соответствие типов.Пытаюсь так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Property Get SummaDoub(Optional Y As Boolean = True, Optional L As ListBox) As Double
 
SummaDoub = dblSummaS
End Property
 
Public Property Let SummaDoub(Y As Boolean, ByVal L As ListBox, S As Double)
Dim i As Integer
S = 0
For i = 0 To L.ListCount - 1
    If Y Then
    S = S + F(Val(Left$(L.List(i), 6))) * Val(Right$(L.List(i), 3))
    Else
    S = S + Val(Left$(L.List(i), 6)) * Val(Right$(L.List(i), 3))
    End If
Next
dblSummaS = S
End Property
Пользовательский тип не определен.Пожалуйста подскажите что я не так делаю.
Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2015, 22:54
Ответы с готовыми решениями:

Property Get и Property Let Странное поведение
Здравствуйте, Господа. Сразу к делу. Написал UserControl, объявил в нём весьма безобидные свойства: Dim FDisplayedField As String ...

Реализовать функции с опциональными параметрами и именованными параметрами
Нужно задачу написать, про ref и out ничего пока не знаю, не понимаю их.. Реализовать функции с опциональными параметрами и...

Подпрограммы с типизированными параметрами -значениями и параметрами-переменными
Помогите пожалуйста). С помощью подпрограммы, определяющей принадлежность символа к заданному множеству, установить количество гласных букв...

4
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
25.10.2015, 00:02
Genn55, так Property Set же (3-й код).

Вообще, вызов этого Property Set с параметрами
Visual Basic
1
2
3
Dim ce As New clsEnter
'...
Set ce.SummaDoub(True) = myListBox
выглядит довольно нелепо - один параметр в левой части присваивания, другой - в правой. Может, переделать его на метод (Public Sub), чтобы вызывать более естественным способом? С другим именем, конечно:
Visual Basic
1
2
3
4
5
6
7
8
'модуль класса
 
Public Sub CalcSum(L As ListBox, Optional Y As Boolean = True)
'...
End Sub
 
'вызов
ce.CalcSum myListBox, False
1
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
26.10.2015, 00:04  [ТС]
Спасибо большое.Но прочитал,что параметров может быть сколько угодно при условии что типы совпадают и в Let на один больше чем в Get.Вот я решил поэкспериментировать.Как вы советуете я сделал изначально и проблем не было как и в случае объявления Y глобально.
Я не могу понять как это все работает с несколькими параметрами.

Добавлено через 1 час 18 минут
Цитата Сообщение от Казанский Посмотреть сообщение
ce.CalcSum
Почему то с таким вызовом у меня не работает,а ошибок не дает,во всплывающем окне все методы и свойства видны.А результат 0.

Добавлено через 22 часа 12 минут
Разобрался переписал по новому и все заработало.Вот что у меня получилось.
Модуль класса.
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
Option Explicit
 
Private X As Long
' Возвращает значение свойства типы и имена переменных строго одинаковы на 1 меньше
Public Property Get lngNum(Optional ByVal dblMin As Byte = 0, Optional ByVal intMax As Integer = 100) As Long
lngNum = X
End Property
' Устанавливает значение свойства типы и имена переменных строго одинаковы на 1 больше, последний указатель на объект
Public Property Set lngNum(ByVal dblMin As Byte, ByVal intMax As Integer, ByVal NewValue As TextBox)
Dim i As Integer, ch As String
NewValue.ForeColor = &H80000008 'черный
'Проверка на максимальное
If Val(NewValue) > intMax Then MyError NewValue, "Не допустимо большое число!", vbExclamation
'Проверка на ввод целого числа
For i = 1 To Len(NewValue)
    ch = Mid$(NewValue, i, 1)
       If ch = "." Then
          MyError NewValue, "Число должно быть целым!", vbExclamation
          Exit For
       End If
    'Проверка на не числовой символ
    If Not (ch >= "0" And ch <= "9") Then MyError NewValue, "Введенное значение не является числовым!", vbCritical
Next
'Проверка на минимальное
If NewValue <> "" And Val(NewValue) < dblMin Then MyError NewValue, "Не допустимо малое число!", vbExclamation
X = Val(NewValue.Text)
 
End Property
' метод'класса
Private Sub MyError(A As Control, Str As String, St As String)
         A.ForeColor = &HFF&       'красный
        MsgBox "Ошибка ввода!" + vbCrLf + Str, St, "Ошибка ввода"
        A.Text = ""
End Sub
Форма (на форме 2 TextBoxа)
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
Option Explicit
 
' Объявление переменной типа clsNum
Dim myObj As clsNum
Dim A As Long, B As Long
 
Private Sub Form_Click() 'смотрим свойства объекта на форме
'Если параметры Property Get не Optional пишем Obj.lngNum(A, B)
Print myObj.lngNum
End Sub
 
Private Sub Form_Load()
A = 1: B = 100
' Создание объекта clsNum
Set myObj = New clsNum
' Установка свойств объекта dblMin,intMax
With myObj
Set myObj.lngNum(0, 1) = Text1
End With
 
End Sub
 
Private Sub Text1_Change()
'Установка свойств объекта TextBoxом и устанавливаем dblMin,intMax
With myObj
Set myObj.lngNum(A, B) = Text1
End With
Text2 = myObj.lngNum 'смотрим свойства объекта в TextBoxе
End Sub
Хотелось бы узнать мнение,кому не трудно, как это выглядит.По мне так разница не большая писать процедуру(функцию) или сразу в Property Set/Let.Правда вызов не совсем привычный,но не зря же это придумали.
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
26.10.2015, 02:39
Genn55, если все работает как Вы хотели, то почему бы и нет
Почему Вы вообще используете класс? Если текстбокс, подлежащий проверке, один, то процедуру проверки можно поместить прямо в Text1_Change или вынести в отдельный модуль. А если текстбоксов много или предполагается их создание в процессе работы формы, тогда обработчик события Change надо переносить в класс.
Кстати, отрицательными числа быть не могут?
1
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
26.10.2015, 17:15  [ТС]
Цитата Сообщение от Казанский Посмотреть сообщение
Почему Вы вообще используете класс?
Пытаюсь освоить основы VB6.Учителей нет,советчиков тоже вот по самоучителю читаю пробую,разбираюсь.Упираюсь в стену пишу сюда,хотя больше стараюсь разобраться самостоятельно.
Цитата Сообщение от Казанский Посмотреть сообщение
обработчик события Change надо переносить в класс
Как это делать я пока не знаю.Для меня сейчас главное понять механизм работы,а что делает мне все равно важнее чтобы работал как я хочу,а не так как получится.
Спасибо огромное за комментарий.
Цитата Сообщение от Казанский Посмотреть сообщение
отрицательными числа быть не могут?
Конечно могут,но цели такой не ставилось.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.10.2015, 17:15
Помогаю со студенческими работами здесь

Подпрограммы с типизированными параметрами -значениями и параметрами-переменными
С помощью подпрограммы подсчитать сумму элементов главной диагонали для матриц 4х4 и 5х5 из вещественных чисел. Добавлено через 1...

[[Property]]
Что означают эти ] ? Вот к примеру говорят метод ], ], не проще ли говорить prototype? :)

Property в c++
Code::Blocks g++ Приветствую, есть ли возможность создать кросс. property (win, linux, macos) - если да то как, и будет ли работаnь...

Property
Вот вроде разобрался с классами, а тут вот одна мелочь осталась, ее функциональное назначение понятно, а вот немного синтаксис хромает,...

Property get value()
Господа, изначально в UserForm нет свойства Value. Если его задать при помощи Property Get Value() Value=НЕЧТО End Propertyто оно...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru