Необходимо сделать список строк, повторив функциональность ListView Control. При клике на выделеном элементе необходимо его подменять на editbox. После редактирования строки (окончание по Enter, Esc или смена фокуса элемента), необходимо проверить отсутствие дублирования строк, если строки совпадают, необходимо сигнализировать об этом, либо вернуть исходное значение. При смене выделения элемента списка необходимо обновлять содержимое других контролов.
Как лучше реализовать эту функциональность?
Здравствуйте, LMS, Вы писали:
Ну вот насчёт того чтобы в выделенной строке появлялся edit, можно так
http://www.terrainformatica.com/?p=83
Здравствуйте, LMS, Вы писали:
LMS>Необходимо сделать список строк, повторив функциональность ListView Control. При клике на выделеном элементе необходимо его подменять на editbox. После редактирования строки (окончание по Enter, Esc или смена фокуса элемента), необходимо проверить отсутствие дублирования строк, если строки совпадают, необходимо сигнализировать об этом, либо вернуть исходное значение. При смене выделения элемента списка необходимо обновлять содержимое других контролов.
LMS> Как лучше реализовать эту функциональность?
Посмотри /html_samples/behaviors/editable-select.htm — это так называкмый редактирумый pick-list (то что ты описал иногда так называют).
Обрати внимание на гиперлинк внизу списка.
Редактируемость option достигается простым объявлением (и см. ссылку в посте Adontz):
#editable-select[editable] option
{
behavior:edit;
}
Ну и behavior_editable_select.cpp модифицируем если надо — как минимум там не проверяется уникальность caption.
Здравствуйте, c-smile, Вы писали:
CS>Посмотри /html_samples/behaviors/editable-select.htm — это так называкмый редактирумый pick-list (то что ты описал иногда так называют).
CS>Обрати внимание на гиперлинк внизу списка.
CS>Редактируемость option достигается простым объявлением (и см. ссылку в посте Adontz):
CS>CS>#editable-select[editable] option
CS>{
CS> behavior:edit;
CS>}
CS>
CS>Ну и behavior_editable_select.cpp модифицируем если надо — как минимум там не проверяется уникальность caption.
Спасибо за совет. Воспользовался. Я для pick-list при инициализации выставляю атрибут editable и в функции handle_focus обрабатываю FOCUS_LOST и FOCUS_GOT. Все нормально работает, но при первом выделении элемента в editable-select в FOCUS_GOT приходит уведомление только для div, хотя фокус находится в option.
if(params.cmd == (HANDLED | FOCUS_GOT))
{
htmlayout::dom::element el = params.target;
if(!el.is_valid())
return on_focus( he, params.target, params.cmd );
std::string str = el.get_element_type(); // отладочная инф.
htmlayout::dom::element par = el.find_nearest_parent("[name='styles_name']"); // имя widget
if(!par.is_valid())
return on_focus( he, params.target, params.cmd );
int curstr = el.get_attribute_int("value", NONE); // номер option
// обновить контролы для стиля
if(curstr >= 0)
{
OnStyleChange(par);
}
return TRUE;
}
Как его отловить?
Сорри, давно не updateился

. В 3.2.2.14 всё работает нормально.