|
|
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
Леди и джентельмены! Пример в вопросе, как всегда, постараюсь упростить до минимума. Имеется форма, в которой пользователь может через txtbox'ы отредактировать выбрнную запись (ControlSourse в них не поля, а приравненные им переменные), либо просто закрыть ее. Это реализовано кнопками ОК и Отмена. Хотелось бы, чтобы кнопка ОК по умолчанию была ENABLED=.f., а становилась =.t. при изменении в любом txtbox. Каков должен быть алгоритм? Благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 15:32:17 |
|
||
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
в каждом txt.Init() вписать Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 15:43:14 |
|
||
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
Это достаточно сложно, ведь тебе придется проверить факт наличия данных во ВСЕХ TextBox. Т.е. контроль в каком-то одном TextBox - недостаточно. Нужно какое-то синтетическое свойство, которое учитывало бы факт модификации данных во всех TextBox. Если бы ты использовала буферизацию и прямое редактирование буфера, то все было бы просто. Т.е. просто во всех TextBox.Valid() ThisForm.CmdOk.Enabled = NOT EMPTY(ChrTran(GetFldState(-1),"1","")) А с переменными памяти придется симулировать работу функции GetFldState(). Это целая история: 1) Заводим пропертю формы ThisForm.strModify = SPACE(10) здесь число 10 - условно. Надо указать число равное количеству TextBox в твоей форме. 2) На эту пропертю вешается метод ASSIGN в котором примерно такой код Код: plaintext 1. 2. 3. 4. 3) Теперь в форме завдим еще один метод, который будет модифицировать эту самую пропертю. Например, ThisForm.MakeModify Код: plaintext 1. 2. 3. 4. 5. 4) Ну, и наконец во всех TextBox.Valid() пишем что-то вроде ThisForm.MakeModify(1,NOT EMPTY(This.Value)) Здесь первый параметр - это порядковый номер, который следует присвоить данному TextBox. Важно не перепутать. Т.е. чтобы разные TextBox не входили с одинм и тем же параметром. К сожалению, невозможно воспользоваться никаким свойством собственно TextBox. Нет никаких уникальных числовых идентификаторов. Они все уникальны в пределах одного контейнера. PS: Может, все-таки откажешся от редактирования через перменные памяти и перейдешь на работу с буферами? Честное слово - это значительно проще во всех смыслах. Работаешь как будто напрямую с полями таблицы, но запись идет не напрямую в таблицу, а в некий буфер. И ты только управляешь фактом сброса данных из этого буфера в исходную таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 16:18:01 |
|
||
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
Все бы хорошо, но он выдает на thisform.cmdOK.Enabled=this.Value#this.Coment, что member cmdOK ему не известен. У меня все эти txtbox'ы и кнопки загнаны в свой класс-контейнер, может поэтому и ссылка на объект не проходит (вместо cmdOK, конечно, стоит мое название, несколько раз перепроверяла, синтаксис объекта верен). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 16:18:40 |
|
||
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
thisform.cmdOK.Enabled=(this.Value#this.Coment) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 16:20:25 |
|
||
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
ЛисонькаВсе бы хорошо, но он выдает на thisform.cmdOK.Enabled=this.Value#this.Coment, что member cmdOK ему не известен. У меня все эти txtbox'ы и кнопки загнаны в свой класс-контейнер, может поэтому и ссылка на объект не проходит (вместо cmdOK, конечно, стоит мое название, несколько раз перепроверяла, синтаксис объекта верен). Ну, так если CmdOk находится в контейнер, то и надо писать всю иерархию ThisForm.MyConteiner.cmdOk.enabled = ... Причем это сработает, если MyContainer - это объект на базовом классе "Container". Если же это объект на базовом классе "Control", то обращение к его вложенным объектам из вне Control в принципе невозможно. Нужно организовывать специальные методы у этого класса Control для модификации реквизитов вложенных объектов и вызывать эти самые методы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 16:23:34 |
|
||
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
ЛисонькаВсе бы хорошо, но он выдает на thisform.cmdOK.Enabled=this.Value#this.Coment, что member cmdOK ему не известен. У меня все эти txtbox'ы и кнопки загнаны в свой класс-контейнер, может поэтому и ссылка на объект не проходит (вместо cmdOK, конечно, стоит мое название, несколько раз перепроверяла, синтаксис объекта верен). Все бы хорошо, но с типами буферизации на практике не работала. Это нужно поэксперементировать сначала, а я сейчас все наживую правлю при лимите времени. Да, уважаемый гуру, методику Вы прописали капитальную и навороченную. Над Вашим кодом обязательно посижу еще, разберу построчно. А вообще сейчас подмала, подумала и решила: сделаю я все Enabled=.f., введу еще одну кнопку Редактировать, только после клика на ней станет Enabled=.t. и пользователь займется изменениями. Эх, а хотела поизящнее и покрасивее... Одно слово - женщина ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 16:26:34 |
|
||
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
ВладимирМНу, так если CmdOk находится в контейнер, то и надо писать всю иерархию Причем это сработает, если MyContainer - это объект на базовом классе "Container". Гм, да, иерархическую азбуку я проморгала, прошу прощения. Базовый класс у меня - контейнер. Но теперь при выполнении строки Thisform.cont_РедБокс.cmd_ОК... неизвестным челном стал cont_РедБокс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 16:46:15 |
|
||
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
Цитирую саму себя. Лисонька Гм, да, иерархическую азбуку я проморгала, прошу прощения. Базовый класс у меня - контейнер. Но теперь при выполнении строки Thisform.cont_РедБокс.cmd_ОК... неизвестным челном стал cont_РедБокс. Вот сейчас сидела разбиралась. Название cont_РедБокс прописано в проперти этого моего класса. А вот окно Locals в Debugger'е дает название cont_РедБокс1. В этом и заключалась у меня ошибка в ссылке на объект. А почему проперти и дебаггер трактуют это название по разному? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 14:32:24 |
|
||
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
ЛисонькаВот сейчас сидела разбиралась. Название cont_РедБокс прописано в проперти этого моего класса. А вот окно Locals в Debugger'е дает название cont_РедБокс1. В этом и заключалась у меня ошибка в ссылке на объект. А почему проперти и дебаггер трактуют это название по разному? Когда ты создаешь класс, то, естесственно, указываешь свойство Name. НО! На форму ты кладешь не сам класс, а экземпляр этого класса. По сути - другой объект. Естесственно, что его имя (свойство Name), в общем случае, будет отлично от имени самого класса. А если положишь на форму несколько экземпляров класса? Как отличить один экземпляр от другого? Только по разным именам (свойствам Name). Вот FoxPro по умолчанию сам и формирует эти имена исходя из того соображения, что в одном контейнере (в данном случае в форме) не может быть 2 объектов с одинаковым свойством Name. Для этого он просто добавляет порядковый номер к значению Name того класса, на основании которого формируется объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 14:55:42 |
|
||
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
Благодарю за разъяснение. А чтобы подобный казус со ссылками на объект не вышел еще раз: название объекта нужно определять через дебаггер или его можно посмотреть еще где-то (если одинаковых классов на форме куча)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 15:07:00 |
|
||
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
ЛисонькаБлагодарю за разъяснение. А чтобы подобный казус со ссылками на объект не вышел еще раз: название объекта нужно определять через дебаггер или его можно посмотреть еще где-то (если одинаковых классов на форме куча)? Сама себе отвечаю - в форме класс просматривается под использующемся именем. Извините за беспокойство. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 15:11:17 |
|
||
|
Изменение Value в txtbox и смена ENABLED=.f. на .t. у кнопки
|
|||
|---|---|---|---|
|
#18+
Hi Лисонька! Потому что имя класса это одно, а имя объекта - это совсем другое... По умолчанию фокс новые объекты именует как имя класса + автоинкрементное число. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 22:52:19 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33216066&tid=1593672]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
433ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 706ms |

| 0 / 0 |
