AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.08.2008, 16:11   #1  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Как получить выделенный текст из StringEdit
У элемента управления StringEdit есть метод getSelection, который возвращает индексы начального и конечного символа выделенного текста. Сначала сделал так:
X++:
int p, n;
[p,n] = memo.getSelection();

info(substr(memo.text(),p+1, n-p));
Если свойство MultiLine = No, то все работает правильно, если MultiLine = Yes, то возвращаются некорректные данные. Опытным путем удалось выяснить, что проблема в том, что getSelection учитывает символы перевода строки, а substr их не учитывает.
Пришлось извратиться следующим образом:
X++:
int p, n, c1,c2;
[p,n] = memo.getSelection();

c1  = charcount(substr(memo.text(),1,p),'\n');
c2 = charcount(substr(memo.text(),p,n-p),'\n');
info(substr(memo.text(),p+1-c1, n-p-c2));
где charcount возвращает число указанных символов в строке
X++:
int charcount(str s, str c)
{
   return strlen(strkeep(s,c));
}
Кто-нибудь знает более простой способ получить выделенный фрагмент из StringEdit?
Подозреваю что, либо такой способ есть, так как от индексов, которые возвращает getSelection, в чистом виде пользы мало, либо это баг.
Старый 05.08.2008, 16:35   #2  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Регистрация: 28.09.2005
Как вариант - использовать TextBuffer - его substr считает переводы строки
Старый 05.08.2008, 17:24   #3  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от altap Посмотреть сообщение
Как вариант - использовать TextBuffer - его substr считает переводы строки
Во-первых такой вариант работает также как и функция substr (не учитывает переводы строки), а во вторых не намного проще предыдущего.

X++:
TextBuffer tb = new TextBuffer();
int p, n;
;
[p,n] = memo.getSelection();

tb.setText(memo.text());
info(tb.subStr(p+1,n-p));
P.S. Кстати, Ax3.0 SP3, возможно в других версиях не так
Старый 05.08.2008, 17:32   #4  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Регистрация: 28.09.2005
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Во-первых
Хе. Все понятно. Надо получать значение из StringEdit не методом text, а методом valuestr. Тогда и простой substr считает как надо (по-крайней мере у меня)
Разница становится заметна в таком примере:
X++:
info(StringEdit.text());
info(StringEdit.valueStr());
Ax 4

Последний раз редактировалось altap; 05.08.2008 в 17:36.
Старый 05.08.2008, 18:00   #5  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Регистрация: 28.09.2005
Разница - в том, что text не выводит символ возврата каретки (13)
За это сообщение автора поблагодарили: Lucky13 (2).
Старый 06.08.2008, 09:18   #6  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от altap Посмотреть сообщение
Разница - в том, что text не выводит символ возврата каретки (13)
valueStr действительно помогло. Спасибо.
Старый 06.08.2008, 15:57   #7  
hated8 is offline
hated8
Участник
Аватар для hated8
Злыдни
 
133 / 18 (1) ++
Регистрация: 27.06.2008
Люди, ХЕЛП!!! УМИРАЮ!

Три часа над одной строчкой парюсь! Мне нужно в стринг едит записать что-либо при AutoDeclaration == No!

Пытался так element.design().control(control::имя едита).valueStr('текст') но ругается! Помогите плз!
Старый 06.08.2008, 16:02   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Попробуйте так
X++:
FormStringControl ctrl;
;
ctrl = element.control(Control::controlName);
ctrl.text("value");
Старый 06.08.2008, 16:33   #9  
Hub is offline
Hub
Участник
 
51 / 10 (1) +
Регистрация: 20.05.2008
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Попробуйте так
X++:
FormStringControl ctrl;
;
ctrl = element.control(Control::controlName);
ctrl.text("value");
> ctrl = element.control(Control::controlName);
ctrl остается null-овым.
Старый 06.08.2008, 16:36   #10  
Hub is offline
Hub
Участник
 
51 / 10 (1) +
Регистрация: 20.05.2008
Цитата:
Сообщение от Hub Посмотреть сообщение
> ctrl = element.control(Control::controlName);
ctrl остается null-овым.
торможу, вопрос снят...
Старый 06.08.2008, 18:25   #11  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от hated8 Посмотреть сообщение
Пытался так element.design().control(control::имя едита).valueStr('текст') но ругается! Помогите плз!
Как еще один возможный вариант - через pasteText:
X++:
FormRun  formA;
FormStringControl  fcString;

fcString = formA.design().controlName('myControlName');
fcString.pasteText('myStringValue', false);
Будет, кстати, работать и при выполнении этого кода в некоторой форме B, в которую форма A (formA) передана как параметр. Через fcString.text() при таком управлении формой A из формы B чего-то не получилось сделать - просто, без ошибки, ничего не происходило, контрол оставался пустым после выполнения...
Старый 12.08.2008, 10:53   #12  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
Подскажите плиз.
нужно к свойствам поля на форме попасть, делаю через
element.design().controlName('Payment').allowedit(false);
но он лочит закладку а не поле. так как есть закладка с таким названием.
автодекларейшн у всех NO.
Старый 12.08.2008, 10:58   #13  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Регистрация: 28.09.2005
Цитата:
Сообщение от propeller Посмотреть сообщение
Подскажите плиз.
А как Аксапта позволила создать на одной форме контролы с одинаковыми именами?
У меня не позволяет. Ax 4.0
Старый 12.08.2008, 11:01   #14  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
там есть page , group , и поле. и у всех одинаковое имя "Payment".
мне нужно поле.
может я неправильно пытаюсь обратиться к нему?
Старый 12.08.2008, 11:18   #15  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Регистрация: 28.09.2005
Мне кажется - неправильно, что они одинаково называются... На мой взгляд правильнее было-бы назвать из PaymentPage, PaymentGroup и Payment соответственно.
Это Ваша форма? Если, да - то проще переименовать, если нет, то - что за форма?
Старый 12.08.2008, 11:32   #16  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
да , уже переименовал . спасибо
Старый 12.08.2008, 11:56   #17  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от propeller Посмотреть сообщение
там есть page , group , и поле. и у всех одинаковое имя "Payment".
мне нужно поле.
может я неправильно пытаюсь обратиться к нему?
К первому можно обратиться по имени, а дальше надо считать позиции контролов в соответствующих контролах-контейнерах (т.е. вкладках, группах), так как в них, к сож., уже нет метода controlName (как в design), но есть controlNum:
X++:
FormRun             formRun;

FormTabPageControl  fcTabPage;
FormGroupControl    fcGroup;
FormStringControl   fcString;


fcTabPage = formRun.design().controlName('Payment');
fcGroup   = fcTabPage.controlNum(2); // допустим, группа - 2-й контрол на вкладке
fcString  = fcGroup.controlNum(3);   // допустим, стрингэдит - 3-й контрол в группе

fcString.pasteText('My String Value for Payment', false);
Реально сталкивался с такой ситуацией совпадения имен на какой-то "не своей" форме. Откуда и знаю пилюлю. Но абсолютно согласен с тем, что в своих разработках следует назначать контролам имена, уникальные в пределах формы.
За это сообщение автора поблагодарили: propeller (1).
Теги
stringedit, выделенный текст, ax3.0, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DataSources и StringEdit на форме Poleax DAX: Программирование 3 16.05.2008 11:32
Ruslan Goncharov: Dynamic enabled() property for StringEdit and arrows Blog bot DAX Blogs 0 18.04.2008 20:05
Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму SysPrintForm? rkorchagin DAX: Программирование 10 17.04.2008 11:59
Как правильно получить значение с компонента формы Daido DAX: Программирование 5 05.11.2007 17:37
Получить текст из word через Com Кирилл DAX: Программирование 4 18.10.2006 11:01

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:03.