delphidelphi-2010

Focus next control on enter - in overridden KeyUp


I have my custom class that extends TEdit:

  TMyTextEdit = class (TEdit)
   private
     fFocusNextOnEnter: Boolean;
   public
    procedure KeyUp(var Key: Word; Shift :TShiftState); override;
   published
     property FocusNextOnExnter: Boolean read fFocusNextOnEnter
                                 write fFocusNextOnEnter default false;
  end;

In The KeyUp procedure I do:

procedure TMyTextEdit.KeyUp(var Key: Word; Shift: TShiftState);
begin
  inherited;

  if FocusNextOnExnter then
    if Key = VK_RETURN then 
      SelectNext(Self as TWinControl, True, false);
end;

But it isn't moving focus to the next control. I tried to

if Key = VK_RETURN then
      Key := VK_TAB;

but it isn't working either. What am I missing?


Solution

  • SelectNext selects next sibling child control, ie. you need to call it on your edit's parent:

    type
      THackWinControl = class(TWinControl);
    
    if Key = VK_RETURN then
      if Assigned(Parent) then
        THackWinControl(Parent).SelectNext(Self, True, False);