Wie man das fokussierte/ausgewähltes Objekt in delphi?

Ich habe ein PageControl Objekt mit mehreren Seiten in separaten tabs.
Jede Registerkarte enthält eine Menge von Objekten wie TEdits und TComboBoxes.
Können sagen, ich bin in der „Registerkarte“ Eingabe von text in ein TEdit und dann die software ändern Registerkarte „Registerkarte B“ und dann wieder auf „Tab A“. Dann die TEdit ist nicht mehr ausgewählt, so dass ich auswählen muss es wieder weiter zu schreiben.

Nun zu meiner Frage:
Wie kann ich die speichern/Holen/speichern des ausgewählten Objekts vor der änderung der Registerkarte, so dass ich zurückkehren kann, um das gleiche Objekt, wenn Sie zurück auf die Vorherige Registerkarte?

Dank!


2018-02-15
Update:

Dank @ExDev!

Screen.ActiveControl war, was ich wo suchen! Ich löste es so:

var 
  FocusObject : TWinControl;
begin
  // Save selected object  
  FocusObject:= Screen.ActiveControl;

  // Restore selected object  
  FocusObject.SetFocus;
end;
  • Nur eine Idee, aber wenn die tabhat eine TagEigenschaft, die Sie speichern könnte die fokussierte Komponente drin. Dann könnte man es abzurufen, und legen Sie es zurück, konzentrierte sich.
  • Wenn meine Antwort das problem gelöst bitte akzeptieren
InformationsquelleAutor Sonocronic | 2018-02-13



One Reply
  1. 1

    Könnten Sie die TPageControl.OnChanging Ereignis zu speichern, das fokussierte Steuerelement vor dem ändern der aktiven Registerkarte und die TPageControl.OnChange Veranstaltung auf die Wiederherstellung Ihrer fokussierten Zustand.

    Beispiel:

    TForm1 = class(TForm)
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        procedure PageControl1Changing(Sender: TObject; var AllowChange: Boolean);
        procedure FormCreate(Sender: TObject);
        procedure PageControl1Change(Sender: TObject);
      private
        FActiveControls : array of TWinControl;
      end;
    
    ...
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      SetLength(FActiveControls, PageControl1.PageCount);
    end;
    
    procedure TForm1.PageControl1Change(Sender: TObject);
    begin
      if(FActiveControls[TPageControl(Sender).ActivePageIndex] <> nil)
      then FActiveControls[TPageControl(Sender).ActivePageIndex].SetFocus();
    end;
    
    procedure TForm1.PageControl1Changing(Sender: TObject;
      var AllowChange: Boolean);
    begin
      FActiveControls[TPageControl(Sender).ActivePageIndex] := Screen.ActiveControl;
    end;

    Hinweis:

    Beide events werden nicht aufgerufen, wenn Sie ändern Sie die aktive Seite in einem code, zum Beispiel, indem der Wert des TPageControl.ActivePage.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.