Например, можно так, модификация метода task формы SysTableBrowser, делаем контрол перед вставкой многострочным, а затем возвращаем обратно.
X++:
FormStringControl stringControl;
Common cursor;
str value;
....
else if (p1 == 772)
{
if (cur is FormStringControl)
{
this.lock();
stringControl = cur;
stringControl.multiLine(true);
ret = super(p1);
value = stringControl.text();
stringControl.multiLine(false);
cursor = ds_Ds.cursor();
cursor.(stringControl.dataField()) = value;
stringControl.update();
this.unLock();
}
else
{
ret = super(p1);
}
}
В целом альтернатива - многострочный контрол, если задача не частая, можно использовать функционал - Поля списком, это не коробка, поищите по форуму, а может быть он у вас уже есть в приложении, там суть в том, что значение изменяется через кнопку, которая и показывает контрол со всеми св-вами.
Цитата:
браузер таблиц - это грид.
грид по умолчанию показывает DisplayHeight = 1.
Это не совсем так, грид по умолчанию показывает скорее всего maximum из всех displayheight контролов в него входящих(я не проверял, но кажется что норм), т.к. если вы просто поместите на грид в обычной форме контрол с displayHeight скажем 2 строки, то грид будет двустрочным, просто для браузера табличек это отключается, посмотрите код в классе SysTableBrowser\addField
X++:
if (dictField.baseType() == Types::String ||
dictField.baseType() == Types::RString ||
dictField.baseType() == Types::VarString)
{
formBuildStringControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldId, j);
formBuildStringControl.displayHeightMode(0);
formBuildStringControl.displayHeightValue(1);
formBuildStringControl.label(dictField.name());
formBuildStringControl.helpText(dictField.label());
formBuildStringControl.allowEdit(allowControlEdit);
}