Тема: Перевірка і зміна тексту в TValueListEditor в OnSetEditText

Компонент TValueListEditor. Попри те що в документації вказано що „Occurs when the user edits the value of a cell.“ дана подія виникає також коли активуєш комірку ЛКМ або переходиш в неї за доп. стрілок, але не виникає якщо програмно (ValueListEditor1.Cells[1,1]) змінити вміст комірки. Проте лише першого разу. Всі подальші програмні зміни вмісту комірки призводять до виникнення події OnSetEditText. Але якщо змінювати вміст комірки всередині процедури яка реагує на подію, то процедура буде викликатися безкінечно а вміст комірки не зміниться.

procedure TForm2.ValueListEditor1SetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: string);
var
    v:integer;
begin
    // 0 - title row
    if ARow = 0 then Exit;
    // 0 - name column
    if ACol = 0 then Exit;

    if Value = '' then Exit;

    OutputDebugString(PChar('"' + Value + '" '));
    
    if not TryStrToInt(Trim(Value), v) then
    begin
        OutputDebugString(PChar('nnnnnnnnn'));
        (Sender as TValueListEditor).Cells[ACol, ARow] := '';
        Exit;
    end;
    
end;

2

Re: Перевірка і зміна тексту в TValueListEditor в OnSetEditText

А в чому питання? Як цього уникнути?
Якщо так, то в таких випадках вимикають обробник подій:

ValueListEditor1.OnSetEditText := nil;
try
// Тут якась робота з ячейками
finally
  ValueListEditor1.OnSetEditText := ValueListEditor1SetEditText;
end;
Подякували: javascriptIsLife1