AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 05.08.2008, 16:11   #1  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Join Date: 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, в чистом виде пользы мало, либо это баг.
Old 05.08.2008, 16:35   #2  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Join Date: 28.09.2005
Как вариант - использовать TextBuffer - его substr считает переводы строки
Old 05.08.2008, 17:24   #3  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Join Date: 21.10.2004
Quote:
Originally Posted by altap View Post
Как вариант - использовать 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, возможно в других версиях не так
Old 05.08.2008, 17:32   #4  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Join Date: 28.09.2005
Quote:
Originally Posted by Lucky13 View Post
Во-первых
Хе. Все понятно. Надо получать значение из StringEdit не методом text, а методом valuestr. Тогда и простой substr считает как надо (по-крайней мере у меня)
Разница становится заметна в таком примере:
X++:
info(StringEdit.text());
info(StringEdit.valueStr());
Ax 4

Last edited by altap; 05.08.2008 at 17:36.
Old 05.08.2008, 18:00   #5  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Join Date: 28.09.2005
Разница - в том, что text не выводит символ возврата каретки (13)
This post has been rated by: Lucky13 (2).
Old 06.08.2008, 09:18   #6  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Join Date: 21.10.2004
Quote:
Originally Posted by altap View Post
Разница - в том, что text не выводит символ возврата каретки (13)
valueStr действительно помогло. Спасибо.
Old 06.08.2008, 15:57   #7  
hated8 is offline
hated8
Участник
hated8's Avatar
Злыдни
 
133 / 18 (1) ++
Join Date: 27.06.2008
Люди, ХЕЛП!!! УМИРАЮ!

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

Пытался так element.design().control(control::имя едита).valueStr('текст') но ругается! Помогите плз!
Old 06.08.2008, 16:02   #8  
kashperuk is offline
kashperuk
Участник
kashperuk's Avatar
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Join Date: 30.05.2004
Location: Atlanta, GA, USA
Попробуйте так
X++:
FormStringControl ctrl;
;
ctrl = element.control(Control::controlName);
ctrl.text("value");
Old 06.08.2008, 16:33   #9  
Hub is offline
Hub
Участник
 
51 / 10 (1) +
Join Date: 20.05.2008
Quote:
Originally Posted by kashperuk View Post
Попробуйте так
X++:
FormStringControl ctrl;
;
ctrl = element.control(Control::controlName);
ctrl.text("value");
> ctrl = element.control(Control::controlName);
ctrl остается null-овым.
Old 06.08.2008, 16:36   #10  
Hub is offline
Hub
Участник
 
51 / 10 (1) +
Join Date: 20.05.2008
Quote:
Originally Posted by Hub View Post
> ctrl = element.control(Control::controlName);
ctrl остается null-овым.
торможу, вопрос снят...
Old 06.08.2008, 18:25   #11  
Gustav is offline
Gustav
Moderator
Gustav's Avatar
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Join Date: 24.01.2006
Location: Санкт-Петербург
Blog Entries: 19
Quote:
Originally Posted by hated8 View Post
Пытался так 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 чего-то не получилось сделать - просто, без ошибки, ничего не происходило, контрол оставался пустым после выполнения...
Old 12.08.2008, 10:53   #12  
propeller is offline
propeller
Участник
propeller's Avatar
 
359 / 29 (1) +++
Join Date: 25.07.2007
Подскажите плиз.
нужно к свойствам поля на форме попасть, делаю через
element.design().controlName('Payment').allowedit(false);
но он лочит закладку а не поле. так как есть закладка с таким названием.
автодекларейшн у всех NO.
Old 12.08.2008, 10:58   #13  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Join Date: 28.09.2005
Quote:
Originally Posted by propeller View Post
Подскажите плиз.
А как Аксапта позволила создать на одной форме контролы с одинаковыми именами?
У меня не позволяет. Ax 4.0
Old 12.08.2008, 11:01   #14  
propeller is offline
propeller
Участник
propeller's Avatar
 
359 / 29 (1) +++
Join Date: 25.07.2007
там есть page , group , и поле. и у всех одинаковое имя "Payment".
мне нужно поле.
может я неправильно пытаюсь обратиться к нему?
Old 12.08.2008, 11:18   #15  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Join Date: 28.09.2005
Мне кажется - неправильно, что они одинаково называются... На мой взгляд правильнее было-бы назвать из PaymentPage, PaymentGroup и Payment соответственно.
Это Ваша форма? Если, да - то проще переименовать, если нет, то - что за форма?
Old 12.08.2008, 11:32   #16  
propeller is offline
propeller
Участник
propeller's Avatar
 
359 / 29 (1) +++
Join Date: 25.07.2007
да , уже переименовал . спасибо
Old 12.08.2008, 11:56   #17  
Gustav is offline
Gustav
Moderator
Gustav's Avatar
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Join Date: 24.01.2006
Location: Санкт-Петербург
Blog Entries: 19
Quote:
Originally Posted by propeller View Post
там есть 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);
Реально сталкивался с такой ситуацией совпадения имен на какой-то "не своей" форме. Откуда и знаю пилюлю. Но абсолютно согласен с тем, что в своих разработках следует назначать контролам имена, уникальные в пределах формы.
This post has been rated by: propeller (1).
Tags
stringedit, выделенный текст, ax3.0, ax4.0

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 03:57.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.