Свои методы и свойства в классе Form

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Свои методы и свойства в классе Form

Сообщение AHTOXA » 11.03.2004 (Чт) 14:11

1) Хотелось бы создать форму с дополнительными методами и свойствами.
2) Передавать ей некоторые значения в качестве инициализационных параметров.
3) Чтобы после закрытия возвращала нужное мне значение или класс.
4) Как сделать данную форму модальной ?
Заранее благодарен.
Bandit

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 11.03.2004 (Чт) 14:57

ну дополнительные свойства создаем так:
Код: Выделить всё
Private m_Prop As Long ' переменная для хранения значения нашего нового свойства
' далше используем пару процедур Property Let/Get
Public Property Get NewProp() As Long
  NewProp = m_Prop ' позволяем прочитать свойство
End Property

Public Property Let fg(ByVal vNewValue As Long)
  m_Prop = NewValue ' а это установка свойства
  ' можно эту процедуру удалить, тогда свойство будет только для чтения
End Property

в Property Let/Get можно (и нужно) добавить проверку корректности значений или вызов еще какихто процедур и функций

а методы - это обычные процедуры и функции объявленные в модуле формы как Public
Код: Выделить всё
Public Sub NewMethod ()

End Sub


вызов свойств и методов:
Form1.PropertyName = Value ' присвоение
Var = Form1.PropertyName ' чтение
Form1.MethodName ' вызом метода
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 11.03.2004 (Чт) 15:06

Спасибо за ответ.

С 1,4 разобрались. Как быть со 2,3 пунктом (4 - Form.Show(1))?
Bandit

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.03.2004 (Пт) 12:09

Вот ведь вредный какой.
Нету у нас ни конструкторов, ни деструкторов! :)
Поэтому вижу такой выход... Создать свою public процедуру (типа конструктор) и вызывать её сразу после создания. И большими буквами написать в комментариях: ПОКА НЕ ВЫЗОВИТЕ InitMe, НИЧЕГО НЕ ДЕЛАЙТЕ!!!

А касаемо п. 3...
Ну, например, завести в форме указатель на объект, который будет получать инфу. А запись сей инфы по указателю осуществлять из события Form_Unload().
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 12.03.2004 (Пт) 12:21

Ага, уже так сделал ;). Лучше бы заказчик заставил меня на c++ проги писать :(
Bandit

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.03.2004 (Пт) 12:22

Чаще всего я делаю таким образом.
Делается форма, в ней объявляется процедура Init приблизительно такого содержания
Код: Выделить всё
Option Explicit
...
Private vVar1 As Long, vVar2 As Long
...
Public Function Init(ByVal CityID As Long, Optional ByVal StreetID As Long) As Long
...
Tag = vbNullString
vVar1 = CityID
vVar2 = StreetID
...
'в некоторых случаях удобнее форму отображать прямо здесь
'в других случаях ее лучше показывать в вызывающей процедуре
Show vbModal
If Tag = "OK" Then
  Init = vVar2
Else
  Init = -1
End If
End Sub

На форме имеется также следующий код:
Код: Выделить всё
Private Sub Form_QueryUnload
If UnloadMode = ... Then
  Cancel = True
  Exit Sub
End If
End Sub

Private Sub cmdOK_Click
Tag = "OK"
Hide
End Sub

Private Sub cmdCancel_Click
Tag = "CANCEL"
Hide
End Sub

Вызывается примерно так:
Код: Выделить всё
Dim ret As Long
Load frmSelectStreet
ret = frmSelectStreet.Init(1,2)
Unload frmSelectStreet
Set frmSelectStreet = Nothing
If ret <= 0 Then
  MsgBox "CANCEL"
Else
  MsgBox "ret = " & ret
End If
Lasciate ogni speranza, voi ch'entrate.

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 12.03.2004 (Пт) 12:34

To alibek
Хороший совет.

Можно подробнее по этому куску кода:

Private Sub Form_QueryUnload
If UnloadMode = ... Then
Cancel = True
Exit Sub
End If
End Sub

Какие значения может принимать UnloadMode ?
Bandit

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.03.2004 (Пт) 13:53

Посмотри Enum QueryUnloadConstants. Это метод, каким закрывают окно. Тебя интересует метод, когда нажимают [X] (или команда Close (Alt+F4) в системном меню), тогда надо делать Cancel = True и вызывать cmdCancel_Click (потому что если юзер закрывает окно, это скорее Cancel, чем OK). Что можно сделать еще - просто сделать ControlBox=False для окна, чтобы его нельзя было закрыть по [X].
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot, Yandex-бот и гости: 5

    TopList  
cron