Ошибка в TDBComboBox или особенность работы?
Форма предназначена для ввода новой информации и работает с двумя таблицами – master и detail. Необходимо, чтобы все компоненты формы (DBEdit, DBComboBox) при открытии отображали пустые строки. Информация из таблицы детализации содержится в DBComboBox. Список создается стандартным способом - DBComboBox.Items.Add(Fields[1].AsString. Если DBComboBox.ItemIndex := -1, то должна отображаться пустая строка. При открытии формы в DBComboBox отображается информация последней записи таблицы детализации. Почему последняя строка– надеюсь понятно. Если заменить в процедуре инициализации списка DBComboBox.ItemIndex := -1 на DBComboBox.Text := ''; то появляется другая странность: Пользователь раскрывает список и, ничего не выбрав, переходит на другой компонент – в DBComboBox вновь появляется информация последней записи таблицы детализации. Исправить это поведение DBComboBox можно так - если в модуле DBCTRLS.PAS изменить SetComboText:
procedure TDBComboBox.SetComboText(const Value: string); var I: Integer;
Redraw: Boolean;
beginif Value <> GetComboText then
begin
if Style <> csDropDown then
begin
Redraw := (Style <> csSimple) and HandleAllocated;
if Redraw then SendMessage(Handle, WM_SETREDRAW, 0, 0);
try
//------ ADD --------------------------------------------------------------------------------if ItemIndex = -1 then
begin
Text := '';
Exit;
end;
//----------------------------------------------------------------------------------------------if Value = '' then I := -1 else I := Items.IndexOf(Value);
ItemIndex := I;
finally
if Redraw then
begin
SendMessage(Handle, WM_SETREDRAW, 1, 0);
Invalidate;
end;
end;
if I >= 0 then Exit;
end;
if Style in [csDropDown, csSimple] then Text := Value;
end;
end;
|
После этого откомпилировать модуль DBCTRLS.PAS и заменить старый. Но может быть есть другие варианты.
С уважением, VS. [000911]