// 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;
|