Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Как сократить однотипный программный код?  [new]
Лисонька
Member

Откуда:
Сообщений: 294
Леди и джентельмены!
Подскажите дилетантке-учительнице. У меня на форме куча текстбоксов, все со свойством ENABLED=.F. По ходу дела мне нужно это свойство у них у всех поменять.Пишу код:
THISFORM.TXTBOX1.ENABLED=.T.
THISFORM.TXTBOX2.ENABLED=.T.
... ... ... ... ... ... ...
THISFORM.TXTBOX25.ENABLED=.T.
Можно ли как-нибудь сократить эту писанину?

И еще. Когда был студенткой - занималась FPD 2.6. Там были процедуры. Однотипные действия загоняла в одну процедуру и когда требовалось писала DO PROC zapis. В VFP это дело не проходит. А я знаю, что просто не так даю эту команду.

Благодарю
4 июл 05, 18:34    [1673774]     Ответить | Цитировать Сообщить модератору
 Re: Как сократить однотипный программный код?  [new]
IgorProgrammer
Member

Откуда:
Сообщений: 687
Макро-подстановкой

for i = 1 to 25
	aa = 'THISFORM.TXTBOX' + ALLTRIM(STR(ii)) + '.ENABLED=.T.'
	&aa
	RELEASE aa
endfor
4 июл 05, 18:43    [1673801]     Ответить | Цитировать Сообщить модератору
 Re: Как сократить однотипный программный код?  [new]
karly™
Guest
1. Воспользоваться функцией SetAll()
2. Создать класс с нужными свойствами. Все текстбоксы создавать на основе класса.

В VFP нет команды Do Procedure. Есть просто Do
4 июл 05, 18:48    [1673812]     Ответить | Цитировать Сообщить модератору
 Re: Как сократить однотипный программный код?  [new]
Лисонька
Member

Откуда:
Сообщений: 294
IgorProgrammer

Макро-подстановкой


Нет, не пойдет. Я прошу прощения, решила стандартизировать text1, text2... для топика. На самом деле все текстбоксы у меня на форме имеют специфическое название: т_фам, т_оценка, т_работа. Так что цикл здесь у меня не прокатит.


karly™
2. Создать класс с нужными свойствами. Все текстбоксы создавать на основе класса.
В VFP нет команды Do Procedure. Есть просто Do



Т.е. сразу указывать название процедуры, да? Интересно, попробую.
А вот создание класса - никогда не занималась. Стоит овчинка выделки?
4 июл 05, 19:03    [1673855]     Ответить | Цитировать Сообщить модератору
 Re: Как сократить однотипный программный код?  [new]
Лисонька
Member

Откуда:
Сообщений: 294
1. Попробовала применить процедуру:
DO proba
Но опять вышло сообщение, что в событиях и методах невозможно применят процедуры. Вопрос: под процедуры нужно писать prg-файлы?

2. Применила thisform.setall("enabled",.t.). Разумеется, сработало на все объекты. А вот thisform.commandbutton.setall("enabled",.t.) выдает ошибку. Значит, всетаки писать свой класс, например под текстбоксы, и никак не иначе?
4 июл 05, 19:35    [1673905]     Ответить | Цитировать Сообщить модератору
 Re: Как сократить однотипный программный код?  [new]
karly™
Guest
Лисонька
1. Попробовала применить процедуру:
DO proba
Но опять вышло сообщение, что в событиях и методах невозможно применят процедуры. Вопрос: под процедуры нужно писать prg-файлы?
Да. Сообщение об ошибке не обманывает.

Лисонька
2. Применила thisform.setall("enabled",.t.). Разумеется, сработало на все объекты. А вот thisform.commandbutton.setall("enabled",.t.) выдает ошибку.
Метод SetAll существует не у всех объектов. У формы - да, у кнопки - нет. Если написать ThisForm.SetAll("Enabled", .T., "textbox"), сработает на все текстбоксы. Если нужно, чтобы не на все - см. ниже.

Лисонька
Значит, всетаки писать свой класс, например под текстбоксы, и никак не иначе?
Да, и это хорошо.
4 июл 05, 19:51    [1673927]     Ответить | Цитировать Сообщить модератору
 Re: Как сократить однотипный программный код?  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
Я обычно пишу в Init формы:

LOCAL loControl
FOR EACH loControl IN THIS.CONTROLS
   IF UPPER(loControl.NAME) ='T_' AND UPPER(loControl.BASECLASS) = 'TEXTBOX'
      WITH loControl
         .ENABLED=.T.

 *        .DisabledBackColor= 15269864
  *       .DisabledForeColor= 9671424 
      ENDWITH
   ENDIF
ENDFOR

Но как заметили Выше - дело это на любителя...
4 июл 05, 21:06    [1673992]     Ответить | Цитировать Сообщить модератору
 Re: Как сократить однотипный программный код?  [new]
Лисонька
Member

Откуда:
Сообщений: 294
karly™
Да. Сообщение об ошибке не обманывает.


Тогда поставим проблему следующим образом:
Для каждой процедуры свой отдельный prg-файл, правильно? Или писать один, который будет содержать все мои процедуры, потом включить его в проект, иначе ссылка просто на данный файл ничего не даст, нужная процедура не запустится. Так?

С каждым часом влюбляюсь в Фокс все больше и больше! Он такой интересный...
4 июл 05, 23:05    [1674079]     Ответить | Цитировать Сообщить модератору
 Re: Как сократить однотипный программный код?  [new]
Sergey Sizov.
Guest
2 Лисонька:

Лисонька
Для каждой процедуры свой отдельный prg-файл, правильно?

Нет, не так. Нельзя писать процедуры внутри элементов формы. А вот писать ли их в одном PRG-файле или в нескольких - это как тебе удобней будет. Главное чтоб файл, содержащий несколько процедур был подключен с помощью команды Set Procedure to Твой_файл_с_процедурами.
4 июл 05, 23:17    [1674096]     Ответить | Цитировать Сообщить модератору
 Re: Как сократить однотипный программный код?  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi Sergey & Лисонька!

> Главное чтоб файл, содержащий несколько процедур был подключен с помощью команды Set Procedure to Твой_файл_с_процедурами.

Если он как раз таки и содержит несколько процедур. Если же всего одну, ОДНОИМЕННУЮ с именем самого prg, то подключать не нужно - и так будет найден (но надо подключать пути поиска SET PATH, размещать файл в текущем каталоге - что важно на этапе разработки, или просто компилировать внутрь exe - там фокс тоже без проблем найдёт).

Кроме того часто удобно обращаться к процедурам как к функциям (в фоксе между ними нету отличий - только способ вызова определяет различия) т.е просто llRes=MyProc(params) или если ничего не возвращается, то просто MyProc(params). Знак = который раньше ставили перед именем функции теперь актуален лишь в нескольких избранных случаях, и они НЕ связаны с пользовательскими процедурами.

Posted via ActualForum NNTP Server 1.2

5 июл 05, 01:38    [1674239]     Ответить | Цитировать Сообщить модератору
 Re: Как сократить однотипный программный код?  [new]
Владимир СА
Member

Откуда:
Сообщений: 7881
Лисонька
Леди и джентельмены!
Подскажите дилетантке-учительнице. У меня на форме куча текстбоксов, все со свойством ENABLED=.F. По ходу дела мне нужно это свойство у них у всех поменять.Пишу код:
THISFORM.TXTBOX1.ENABLED=.T.
THISFORM.TXTBOX2.ENABLED=.T.
... ... ... ... ... ... ...
THISFORM.TXTBOX25.ENABLED=.T.
Можно ли как-нибудь сократить эту писанину?

И еще. Когда был студенткой - занималась FPD 2.6. Там были процедуры. Однотипные действия загоняла в одну процедуру и когда требовалось писала DO PROC zapis. В VFP это дело не проходит. А я знаю, что просто не так даю эту команду.

Благодарю

Hi, Лисонька!
Можно, а может и нужно, в форме создавать собственные методы (они и есть процедуры). Когда открыта форма для редактирования: меню Form\New metod ввести имя метода, а в нем код типа:
IF <условие>
  THISFORM.TXTBOX1.ENABLED=.T.
  THISFORM.TXTBOX2.ENABLED=.T.
  ... ... ... ... ... ... ...
  THISFORM.TXTBOX25.ENABLED=.T.
ELSE
  THISFORM.TXTBOX1.ENABLED=.F.
  THISFORM.TXTBOX2.ENABLED=.F.
  ... ... ... ... ... ... ...
  THISFORM.TXTBOX25.ENABLED=.F.
ENDIF
Затем обращаться к этому методу:
THISFORM.<имя метода>
Примерно так.
5 июл 05, 07:06    [1674359]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить