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

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

24.10.2015, 22:54. Показов 2802. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru