Delphi — изменение OnChange в TComboBox

Я хочу изменить TComboBox, чтобы, если я наберу в него текст или вручную установлю свойство Text, оно вызовет событие OnChange.

Как и сейчас, выполнение ComboBox.Text := 'blah' не вызывает событие OnChange, равно как и ввод в поле.

Я попытался создать потомка TComboBox, что, как я полагаю, является правильным подходом, но я не совсем уверен, как изменить то, что запускает события.


person Doogie Howser    schedule 27.03.2013    source источник


Ответы (1)


Насколько мне известно, ввод в поле со списком приведет к срабатыванию события OnChange. Но это правда, что изменение свойства text не влияет.

Способ, которым я хотел бы заставить OnChange сработать для вашего поля со списком, - это обработать сообщение CM_TEXTCHANGED. Обработчик для этого должен вызвать метод Change, который затем вызовет OnChange, если он был назначен.

В качестве простого примера, вот реализация класса интерпозера:

type
  TComboBox = class(StdCtrls.TComboBox)
  protected
    procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  end;

procedure TComboBox.CMTextChanged(var Message: TMessage);
begin
  inherited;
  Change;
end;
person David Heffernan    schedule 27.03.2013
comment
+1 за использование промежуточного класса, ИМХО, это лучший подход. - person jachguate; 27.03.2013
comment
Я не уверен, что такое промежуточный класс, но я сделал это в своем классе-потомке, и это сработало. Спасибо! - person Doogie Howser; 27.03.2013