Тема: InputBox
Показать сообщение отдельно
Старый 02.04.2021, 11:53   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
На основе класса диалог когда-то делал для себя такой метод
X++:
static container InputBox(container _conFields, caption _caption = "")
{
    container ret = conNull();
    Dialog dlg = new Dialog();
    List listFields = new list(Types::Class);
    ListEnumerator enumerator;
    int n = conlen(_conFields);
    int i;
    ;

    for (i = 1; i <= n; i += 3)
    {
        listFields.addEnd(
            dlg.addFieldValue(
                conpeek(_conFields, i),
                conpeek(_conFields, i + 1),
                conpeek(_conFields, i + 2)));
    }

    dlg.caption(_caption);

    if (dlg.run())
    {
        enumerator = listFields.getEnumerator();
        while (enumerator.moveNext())
        {
            ret += enumerator.current().value();
        }
    }

    return ret;
}
в переменную _conFields нужно передать сплошным списком тройки параметров такие же как в dialog.addFieldValue: тип, значение по умолчанию, подпись

Пример использования:
X++:
static void Job_TestInputBox(Args _args)
{
    FromDate FromDate;
    ToDate ToDate;
    container con;
    ;

    con = ksm::InputBox([
        typeId(FromDate), FromDate, "",
        typeId(ToDate), ToDate, ""
        ], "Caption");

    if (con == conNull())
    {
        // на диалоге пользователь нажал кнопку Отмена
        return;
    }

    [FromDate, ToDate] = con;
    
    info(strfmt("FromDate = %1", FromDate));
    info(strfmt("ToDate = %1", ToDate));
    //...
}