![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Изменить поведение при нажатии для TRadioButton или TComboBoxDelphi , Компоненты и Классы , ФлажкиИзменить поведение при нажатии для TRadioButton или TComboBox
Оформил: DeeCo // Q: It appears that programatically setting Item.Index for the Radio Button // fires the onClick event. It also appears doing the same for the // ComboBox does NOT fire the OnClick event. Does another property the two // control effect this behavior. // A: No, it is caused by the way Windows sends the notifications that fire the // event when the control state is changed by a program action. // Q: I have an instance where I need each of // the control to exhibit the opposite behavior. // A: For a TRadiobutton you can disconnect the OnClick handler, change the // state, then reconnect the handler. procedure ChangeRadiobuttonState(ARadiobutton: TRadiobutton; checkit: Boolean); var oldhandler: TNotifyEvent; begin oldhandler := ARadiobutton.Onclick; ARadiobutton.Onclick := nil; ARadiobutton.Checked := checkit; ARadiobutton.OnClick := oldhandler; end; // To make the combobox "click" after setting the item index simply call its // Click method. The control inherits this method from TControl, but it is // protected. So you need a bit of hoop-jumping: Type TComboCracker = class(TCombobox); procedure SetComboboxIndex(ACombobox: TCombobox; Index: Integer); begin ACombobox.ItemIndex := Index; TCombocracker(ACombobox).Click; end; Текст переведен на русский язык: Код, предоставленный ниже, является решением проблемы программного изменения состояния TRadioButton или TComboBox без вызова соответствующего события. Для TRadioButton, когда вы изменяете свойство Checked программно, оно вызывает событие OnClick. Для избежания этого поведения можно отключить обработчик OnClick, изменить состояние и затем снова подключить обработчик. Это достигается в процедуре
Для TComboBox, когда вы изменяете свойство ItemIndex программно, оно не вызывает событие OnClick. Для имитации клика для TComboBox нужно вызвать метод Click. Однако, этот метод защищен и не может быть доступен напрямую. Чтобы преодолеть это ограничение, создается новый класс Код можно улучшить добавлением обработки ошибок и валидации параметров входных данных. Например, вы можете проверять, является ли индекс ввода в диапазоне допустимых значений перед изменением свойства ItemIndex TComboBox. Вот обновленная версия кода с некоторыми улучшениями:
В обновленной версии я добавил обработку ошибок с помощью исключений для обработки недопустимых индексов ввода и неиспользуемых обработчиков OnClick. Это делает код более устойчивым и удобным в использовании. Изменение поведения при нажатии для TRadioButton или TComboBox может быть достигнуто программными способами, изменяющими состояние контрола и временно отключая обработчик событий. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |