|  18.10.2013, 08:49 | #1 | 
| Участник | textChange на форме. Как изменить текст? 
			
			Всем добрый день. На форме есть поле типа Range. Нужно из выпадающего списка выбирать значение, оно добавляется к уже существующим в этом поле. Решил улучшить, чтобы между значениями автоматически проставлялась запятая. Перекрыл методы lookup() и textChange() на элементе ppoSlitters. На диалогах RunBase все отлично работает, а вот на форме не хочет, чего-то не хватает. Не подскажите, чего я мог упустить? X++: public class FormRun extends ObjectRun { Range ppoSlittersBeforeLookup; } public void lookup() { SysTableLookup tableLookup; Query query = new Query(); ; tableLookup = SysTableLookup::newParameters(tableNum(WrkCtrTable), this); tableLookup.addLookupfield(fieldNum(WrkCtrTable, WrkCtrId)); tableLookup.addLookupfield(fieldNum(WrkCtrTable, WrkCtrGroupId)); tableLookup.addLookupfield(fieldNum(WrkCtrTable, Name)); query.addDataSource(tablenum(WrkCtrTable)); tableLookup.parmQuery(query); tableLookup.performFormLookup(); ppoSlittersBeforeLookup = this.text(); } public void textChange() { str text; int pos; ; if (ppoSlittersBeforeLookup) { text = this.text(); if (text) { pos = strscan(text, ppoSlittersBeforeLookup, 1, strlen(text)); if (pos) { text = strins(text, ',', pos + strlen(ppoSlittersBeforeLookup)); } this.text(text); // <-- этот метод почему-то не отрабатывает на форме, но в диалоге все ок this.setSelection(strlen(text), strlen(text)); } ppoSlittersBeforeLookup = ''; } } 
				__________________ // no comments Последний раз редактировалось dech; 18.10.2013 в 09:14. | 
|  | 
|  18.10.2013, 09:24 | #2 | 
| Участник | 
			
			Попробуйте перекрыть modified у поля и там пропишите element.redraw(); X++: public boolean modified() { boolean ret; ; ret = super(); element.redraw(); return ret; } | 
|  | 
|  18.10.2013, 10:25 | #3 | 
| Участник | 
			
			К сожалению, это не то, что мне надо. Я в комментарии указал место, которое не работает. В итоге текст становится пустой строкой и при перерисовке используется уже пустая строка.
		 
				__________________ // no comments Последний раз редактировалось dech; 18.10.2013 в 10:27. | 
|  | 
|  18.10.2013, 12:54 | #4 | 
| Участник | 
			
			А если не this.text(Text), а прям контрол указать ppoSlitters.text(Text) ? PS: и я super() не увидел в textChange() Последний раз редактировалось Player1; 18.10.2013 в 12:56. | 
|  | 
|  18.10.2013, 13:59 | #5 | 
| Участник | Цитата: PS: super() здесь не нужен, и даже если его воткнуть, ничего не изменится. 
				__________________ // no comments | 
|  | 
|  18.10.2013, 19:30 | #6 | 
| Участник | 
			
			Попробуйте добавить в lookup-метод строку this.replaceOnLookup(false).
		 | 
|  | 
|  21.10.2013, 09:12 | #7 | 
| Участник | 
			
			Это учтено изначально и прописано в свойствах элемента.
		 
				__________________ // no comments | 
|  | 
|  22.10.2013, 13:37 | #8 | 
| Участник | 
			
			Ребята, очень срочно нужен ответ, у кого есть свободное время, поэкспериментируйте, пожалуйста! Может это баг аксапты? Версия AX 4.0.
		 
				__________________ // no comments | 
|  | 
|  22.10.2013, 13:53 | #9 | 
| Участник | 
			
			У вас контрол с источником данных не связан? Может быть изменить значение не только в контроле но и в связанном поле источника данных?
		 | 
|  | |
| За это сообщение автора поблагодарили: db (1), dech (1). | |
|  22.10.2013, 14:10 | #10 | 
| Роман Долгополов (RDOL) | 
			
			сделал ваш пример на форме - один контрол на дизайне и всё. dax2009 ru8 fp19. запятые подставляются. работает в общем контрол не связан с источником данных что то вы недоговариваете или всё несколько сложнее кстати текст из контрола правильнее получать через valueStr(). text() может вернуть пусто или не всё - зависит от видимости или активности контрола проверьте связанность с ds проверьте не прыгает ли куда нибудь фокус напишите valueStr вместо text() там где получаете текущее значение | 
|  | 
|  22.10.2013, 14:32 | #11 | 
| Участник | 
			
			Контрол связан с источником данных. Локальная переменная text принимает верные значения. А через метод valueStr() вроде бы можно только вернуть значение, но не записать... К сожалению DEV-база временно не доступна, как будет возможность - я проверю.
		 
				__________________ // no comments | 
|  | 
|  22.10.2013, 14:42 | #12 | 
| Участник | 
			
			Сделал у себя - в переменную ppoSlittersBeforeLookup ничего не добавляется, получается пустой.
		 | 
|  | 
|  23.10.2013, 05:12 | #13 | 
| Участник | pasteText() 
			
			Добрый день.  Не помню точных подробностей, но помню что метод контрола pasteText() выручал. | 
|  | 
|  24.10.2013, 10:04 | #14 | 
| Участник | 
			
			Получилось сделать, с небольшим допилом. Если, вдруг, кому захочется руками вводить рабочие центры. Методы формы. X++: public class FormRun extends ObjectRun { Range ppoSlittersBeforeLookup; boolean lookup; } public void init() { super(); lookup = false; } X++: public boolean modified() { boolean ret; ret = super(); this.textChange(); element.redraw(); lookup = false; return ret; } public void textChange() { str text; int pos; ; if (ppoSlittersBeforeLookup && lookup) { text = this.text(); text = text + ","; ppoSlittersBeforeLookup = text + ppoSlittersBeforeLookup; this.text(ppoSlittersBeforeLookup); ppoSlittersBeforeLookup = ''; } else { ppoSlittersBeforeLookup = this.text(); } } public void lookup() { SysTableLookup tableLookup; Query query = new Query(); ; lookup = true; tableLookup = SysTableLookup::newParameters(tableNum(WrkCtrTable), this); tableLookup.addLookupfield(fieldNum(WrkCtrTable, WrkCtrId)); tableLookup.addLookupfield(fieldNum(WrkCtrTable, WrkCtrGroupId)); tableLookup.addLookupfield(fieldNum(WrkCtrTable, Name)); query.addDataSource(tablenum(WrkCtrTable)); tableLookup.parmQuery(query); tableLookup.performFormLookup(); ppoSlittersBeforeLookup = this.text(); } | 
|  |