Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
ВнизПроблема с ComboBox.ItemIndex Найти похожие ветки
← →
Plt (2004-03-02 11:59) [0]Написал свой компонент, наследник от TComboBox. Нужен для поиска итемса по введенным буквам. Процедура поиска в событии OnChange. Если поиск прошел успешно ItemIndex-у присваиваю значение, но после выхода из этой процедуры ItemIndex = -1. Почему? Как победить?
procedure TdComboBox.Change;
var
ItemPos : integer;
TypeLen : integer;
begin
inherited Change;
if (FComplete = true) and (FPressCommandKey = false) and
((Style = csDropDown) or (Style = csSimple)) then
begin
if (Length(Text) > 0) and (Items.Count > 0) then
begin
ItemPos := Perform(CB_FINDSTRING,-1,Integer(PChar(Text)));
if ItemPos <> CB_ERR then
begin
TypeLen := Length(Text);
ItemIndex := ItemPos;
SelStart := TypeLen;
SelLength := Length(Text) - TypeLen;
DoOnSearch;
end;
end;
end;
end;
← →
Goida (2004-03-02 13:50) [1]Думая, потому что элемент не выбирается всё-таки. Но, кажется, в исходном комбобоксе позиционирование происходит автоматически, если слова отсортированы...
← →
Plt (2004-03-02 14:02) [2]Тогда каким образом железно выбрать элемент из списка?
← →
Семен Сорокин (2004-03-02 14:07) [3]2Plt
имхо, когда выставляешь ItemIndex := ItemPos; у тебя вызывается снова Change, т.е. как бы неявная рекурсия, надо как-то блокировать этот вызов, может быть флаг какой-то выставлять.
← →
Plt (2004-03-02 14:45) [4]Если не трудно может примерчик напишите. А то у меня не выходит каменный цветок.
← →
Семен Сорокин (2004-03-02 15:41) [5]
private
FChanged: boolean; // флаг в наследнике
constructor
...
begin
...
FChanged := false;
end;
procedure TdComboBox.Change;
var
ItemPos : integer;
TypeLen : integer;
begin
inherited Change;
if (FComplete = true) and (FPressCommandKey = false) and
not FChanged and ((Style = csDropDown) or (Style = csSimple)) then
begin
if (Length(Text) > 0) and (Items.Count > 0) then
begin
FChanged := true;
ItemPos := Perform(CB_FINDSTRING,-1,Integer(PChar(Text)));
if ItemPos <> CB_ERR then
begin
TypeLen := Length(Text);
ItemIndex := ItemPos;
SelStart := TypeLen;
SelLength := Length(Text) - TypeLen;
DoOnSearch;
end;
FChanged := false;
end;
end;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.013 c