:: Главная :: Решения :: Статьи :: Проект "Русский help" :: Файловый архив :: Фотоальбом :: Ссылки ::
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  


Форумы  :: FAQ FoxPro

Как из модальной формы вернуть несколько значений
Дата: 05.11.06 23:46:01 ОтветитьЦитировать

Вопрос:

Запускаю модальную форму командой:

DO FORM MyForm.scx TO m.MyVar

В переменную m.MyVar будет записано одно возвращаемое значение. А как вернуть из модальной формы несколько значений? Как вернуть из модальной формы массив?

Ответ:

Идея решения принадлежит Юрию Шутенко (JS).

Суть идеи заключается в том, что хотя FoxPro ограничивается одним возвращаемым значением, но не накладывается никаких ограничений на тип этого возвращаемого значения. В данном случае, следует в качестве возвращаемого значения воспользоваться переменной типа "Object".

В событии UNLOAD формы пишется примерно такой код:


  
 * Создаем переменную типа "Object"  
  LOCAL loReturnValue   
  loReturnValue = CreateObject("Empty")  
    
 * Формируем в этой переменной нужное количество свойств  
 * и записываем в них нужные значения  
  AddProperty(m.loReturnValue,"Prop1")  
  m.loReturnValue.Prop1 = "Первое значение"  
    
  AddProperty(m.loReturnValue,"Prop2")  
  m.loReturnValue.Prop2 = "Второе значение"  
    
 * Добавляем свойство типа "массив"  
  AddProperty(m.loReturnValue,"PropArray[2,2]")  
  m.loReturnValue.PropArray[1,1] = 1  
  m.loReturnValue.PropArray[1,2] = 2  
  m.loReturnValue.PropArray[2,1] = 3  
  m.loReturnValue.PropArray[2,2] = 4  
    
  RETURN m.loReturnValue

Вызов такой формы и разбор возвращаемых параметров примет такой вид

  
  LOCAL loNewValue  
  loNewValue = NULL  
    
  DO FORM MyForm.scx TO m.loNewValue  
    
 * Переписываем возвращенные значения из свойств объекта в переменные памяти  
  LOCAL lcVal1, lcVal2, laArray(2,2)  
  lcVal1 = m.loNewValue.Prop1  
  lcVal2 = m.loNewValue.Prop2  
  =ACOPY(m.loNewValue.PropArray, m.laArray)

Впрочем, можно и не переписывать значений из свойств полученного объекта в переменные памяти. Это уже зависит от конкретной задачи.

Замечание:

Объект класса "Empty" и функция AddProperty() были введены в FoxPro в версии Visual FoxPro 8. Для младших версий FoxPro в качестве возвращаемого объекта можно использовать объект класса "Custom", а для создания новых свойств его метод Custom.AdProperty().

  
 * Создаем переменную типа "Object"  
  LOCAL loReturnValue   
  loReturnValue = CreateObject("Custom")  
    
 * Формируем в этой переменной нужное количество свойств  
 * и записываем в них нужные значения  
  m.loReturnValue.AddProperty("Prop1")  
  m.loReturnValue.Prop1 = "Первое значение"  
    
  ...


Метод AddProperty() был введен в FoxPro в версии Visual FoxPro 6. Для младших версий FoxPro нужное количество свойств возвращаемого объекта, да и сам объект, необходимо сформировать заранее в соответствующей библиотеке классов.


Темы, связанные с данной:

Что означает префикс (буква) "m." перед именем
Ratings: 0 negative/0 positive


Тема Просмотров Написано Написано
  Form 4698 Владимир Максимов 01.03.05 21:13
  Почему созданный массив или переменную не "видно" в других методах формы 6656 Владимир Максимов 30.03.05 15:37
  Как перехватить нажатие на крестик в правом верхнем углу формы 8604 Владимир Максимов 01.04.05 07:45
  Почему параметры, переданные в форму "видно" только в INIT-формы 5324 Владимир Максимов 22.08.05 18:43
  Как из модальной формы вернуть несколько значений 7182 Владимир Максимов 05.11.06 23:46
  Как из модальной формы, открытой через Show(1) вернуть значение 5102 Владимир Максимов 05.11.06 23:51


Извините, но у вас нет прав для того, чтобы писать в этом форуме.

On-line: 33 and Guests: 33


© 2006 Fox Club 
Яндекс.Метрика