Показать сообщение отдельно
Старый 06.12.2012, 14:21   #1  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Как вариант, в ClassDeclaration формы добавляется какой-либо флаг, например, переменная isSelected
В методе mouseDblClick (или прочих) дерева анализируем, выбрана ли конечная запись или родительская. Если выбрана конечная, то isSelected устанавливаем в true и closeSelect
А в closeSelect вызываем супер только если isSelected установлена в true. Кроме того, в canClose так же анализируем эту переменную.
В качестве примера:
Это в дереве:
X++:
public int mouseDblClick(int _x, int _y, int _button, boolean _Ctrl, boolean _Shift)
{
    int ret;

    ret = super(_x, _y, _button, _Ctrl, _Shift);

    element.selectItem();

    return ret;
}
Все остальное в element
X++:
void selectItem()
{
    str ret;
    ;

    ret = this.selectedItem();

    if (isSelected)
    {
        this.closeSelect(ret);
    }

}
X++:
str selectedItem()
{
    FormTreeItem        item;
    TMTable_OVK         locTMTable;
    AssLevelType_OVK    levelType;
    str                 result = '';
    ;

    if (tree.visible())
    {
        item            = tree.getItem(tree.getSelection());
        locTMTable      = TMTable_OVK::find(item.data());
    }
    else
    {
        locTMTable.data(TMTable);
    }

    levelType           = locTMTable.TMLevelType;

    if (levelType == AssLevelType_OVK::Children || (levelType == AssLevelType_OVK::ParentGroup && allowSelectGroup))
    {
        isSelected  = true;
        result      = locTMTable.TMId;
    }

    return result;

}
X++:
public void closeSelect(str _selectString)
{
    ;

    if (isSelected)
    {
        super(_selectString);
    }
}
X++:
public boolean canClose()
{
    boolean ret;
    ;

    ret = super();

    return ret && isSelected;
}
X++:
public int task(int _taskId)
{
    #TASK
    int ret;

    ret = super(_taskId);

    if (_taskId == #TASKENTER)
    {
        this.selectItem();
    }

    return ret;
}
Код не очень причесанный, но работает.