powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сократить однотипный программный код?
11 сообщений из 11, страница 1 из 1
Как сократить однотипный программный код?
    #33148762
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леди и джентельмены!
Подскажите дилетантке-учительнице. У меня на форме куча текстбоксов, все со свойством ENABLED=.F. По ходу дела мне нужно это свойство у них у всех поменять.Пишу код:
THISFORM.TXTBOX1.ENABLED=.T.
THISFORM.TXTBOX2.ENABLED=.T.
... ... ... ... ... ... ...
THISFORM.TXTBOX25.ENABLED=.T.
Можно ли как-нибудь сократить эту писанину?

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

Благодарю
...
Рейтинг: 0 / 0
Как сократить однотипный программный код?
    #33148777
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Макро-подстановкой

Код: plaintext
1.
2.
3.
4.
for i =  1  to  25 
	aa = 'THISFORM.TXTBOX' + ALLTRIM(STR(ii)) + '.ENABLED=.T.'
	&aa
	RELEASE aa
endfor
...
Рейтинг: 0 / 0
Как сократить однотипный программный код?
    #33148784
karly™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Воспользоваться функцией SetAll()
2. Создать класс с нужными свойствами. Все текстбоксы создавать на основе класса.

В VFP нет команды Do Procedure. Есть просто Do
...
Рейтинг: 0 / 0
Как сократить однотипный программный код?
    #33148812
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorProgrammer
Макро-подстановкой


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


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


Т.е. сразу указывать название процедуры, да? Интересно, попробую.
А вот создание класса - никогда не занималась. Стоит овчинка выделки?
...
Рейтинг: 0 / 0
Как сократить однотипный программный код?
    #33148855
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Попробовала применить процедуру:
DO proba
Но опять вышло сообщение, что в событиях и методах невозможно применят процедуры. Вопрос: под процедуры нужно писать prg-файлы?

2. Применила thisform.setall("enabled",.t.). Разумеется, сработало на все объекты. А вот thisform.commandbutton.setall("enabled",.t.) выдает ошибку. Значит, всетаки писать свой класс, например под текстбоксы, и никак не иначе?
...
Рейтинг: 0 / 0
Как сократить однотипный программный код?
    #33148872
karly™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лисонька1. Попробовала применить процедуру:
DO proba
Но опять вышло сообщение, что в событиях и методах невозможно применят процедуры. Вопрос: под процедуры нужно писать prg-файлы?Да. Сообщение об ошибке не обманывает.

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

ЛисонькаЗначит, всетаки писать свой класс, например под текстбоксы, и никак не иначе?Да, и это хорошо.
...
Рейтинг: 0 / 0
Как сократить однотипный программный код?
    #33148917
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я обычно пишу в Init формы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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

Но как заметили Выше - дело это на любителя...
...
Рейтинг: 0 / 0
Как сократить однотипный программный код?
    #33148988
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karly™Да. Сообщение об ошибке не обманывает.

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

С каждым часом влюбляюсь в Фокс все больше и больше! Он такой интересный...
...
Рейтинг: 0 / 0
Как сократить однотипный программный код?
    #33149000
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Лисонька:

ЛисонькаДля каждой процедуры свой отдельный prg-файл, правильно?
Нет, не так. Нельзя писать процедуры внутри элементов формы. А вот писать ли их в одном PRG-файле или в нескольких - это как тебе удобней будет. Главное чтоб файл, содержащий несколько процедур был подключен с помощью команды Set Procedure to Твой_файл_с_процедурами.
...
Рейтинг: 0 / 0
Как сократить однотипный программный код?
    #33149079
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Sergey & Лисонька!

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

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

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

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Как сократить однотипный программный код?
    #33149120
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛисонькаЛеди и джентельмены!
Подскажите дилетантке-учительнице. У меня на форме куча текстбоксов, все со свойством 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 ввести имя метода, а в нем код типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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.<имя метода>
Примерно так.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сократить однотипный программный код?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]