Ich habe eine DB-Komponente, die DataLink.UpdateRecord aufgerufen wird, wenn sie CM_EXIT Nachricht empfängt. Diese Nachricht wird gesendet, wenn sie den Fokus verliert. Wenn ich auf den Post-Button klicke, verliert es nicht den Fokus und der Wert wird nicht in die Datenquelle geschrieben. Wie kann ich erreichen, dass die Komponente den Fokus verliert, ohne auf einen anderen zu wechseln?Wie kann der Fokus von der aktuell fokussierten Komponente entfernt werden?
Antwort
könnten Sie verwenden:
procedure TCustomForm.DefocusControl(Control: TWinControl; Removing: Boolean);
Werfen Sie einen Blick auf TCustomForm.FocusControl
. Sie können nicht den Fokus verlieren, ohne den Fokus auf etwas anderes zu setzen, aber Sie können umschalten und dann sofort zurückschalten, was wahrscheinlich funktionieren würde.
Und wie kann ich es mit Focuscontrol? Der Aufruf der aktiven Steuerung löst keine Ereignisse aus. – LukLed
Wir dies zu erreichen, indem die Self.ActiveControl Einstellung: = nil. Dadurch werden alle Exit-Ereignisse ausgelöst. In unserem Fall wollten wir uns auch nach dem Speichern wieder auf die Steuerung konzentrieren. Das erforderte ein paar zusätzliche Überprüfungen, um sicherzustellen, dass wir eine gute Kontrolle hatten, die den Fokus akzeptieren konnte.
procedure TSaleEditor.SaveCurrentState();
var
SavedActiveControl: TWinControl;
AlternateSavedControl: TWinControl;
begin
// Force the current control to exit and save any state.
if Self.ActiveControl <> nil then
begin
SavedActiveControl := Self.ActiveControl;
// We may have an inplace grid editor as the current control. In that case we
// will not be able to reset it as the active control. This will cause the
// Scroll box to scroll to the active control, which will be the lowest tab order
// control. Our "real" controls have names, where the dynamic inplace editor do not
// find an Alternate control to set the focus by walking up the parent list until we
// find a named control.
AlternateSavedControl := SavedActiveControl;
while (AlternateSavedControl.Name = '') and (AlternateSavedControl.Parent <> nil) do
begin
AlternateSavedControl := AlternateSavedControl.Parent;
end;
Self.ActiveControl := nil;
// If the control is a radio button then do not re-set focus
// because if you are un-selecting the radio button this will automatically
// re-select it again
if (SavedActiveControl.CanFocus = true) and
((SavedActiveControl is TcxRadioButton) = false) then
begin
Self.ActiveControl := SavedActiveControl;
end
else if (AlternateSavedControl.CanFocus = true) and
((AlternateSavedControl is TcxRadioButton) = false) then
begin
Self.ActiveControl := AlternateSavedControl;
end;
end;
end;
Es gibt eine SetFocus-Funktion in der Windows-Einheit. Versuchen Sie folgendes:
Windows.SetFocus(0);
- 1. Wie kann der Fokus von einem einzelnen Steuerelement entfernt werden?
- 2. Wie kann die Größe eines aktuell fokussierten Elements in einem RecyclerView erhöht werden?
- 3. Wie entfernt man den Fokus von der Textbox?
- 4. Wie entfernt man den Fokus von UITextField?
- 5. Wie entfernt man den Fokus von SearchView?
- 6. Wie kann der direkte Fokus in TextInputLayout deaktiviert werden?
- 7. Angular2 - Wie benachrichtigt werden, dass eine Komponente den Fokus verliert
- 8. In Firefox/Opera kann der Fokus nicht eingestellt werden
- 9. Transparenz in fokussierten/nicht fokussierten Fenstern
- 10. Wie kann ein NotifyPropertyChanged-Ereignis in einem fokussierten Eingabesteuerelement unterdrückt werden?
- 11. Wie kann die Sammlung "Gruppe" entfernt werden?
- 12. Flexibles Verfahren zum Erkennen einer fokussierten Steuerungsänderung
- 13. Geburtstagsdaten werden nach der Aktualisierung entfernt
- 14. Kann nach dem Hinzufügen der CardView-Komponente nicht erstellt werden
- 15. Wie wird der Standardkonstruktor von System.Drawing.Graphics entfernt?
- 16. Wie kann die Reihenfolge der Ebenen aus der Faktorvariablen in R entfernt werden?
- 17. Wie kann der Tabellenname in den Spaltennamen in der Abfrage entfernt werden?
- 18. Wie kann der Tastaturfokus von Links in Firefox zugelassen werden?
- 19. EventListener kann nicht entfernt werden
- 20. Wie werden alle Nullen vom Anfang der Zeichenfolge entfernt?
- 21. JQuery.address Wie # aus der URL entfernt werden (Javascript window.location remove #)
- 22. WiX: Wie kann verhindert werden, dass ein Registrierungswert bei der Deinstallation entfernt wird?
- 23. Wie kann der Zustand der Komponente in React richtig gehandhabt werden?
- 24. Flex: Wie kann auf die Eigenschaften der Komponente in der dynamischen Erstellung zugegriffen werden?
- 25. Wie erhalte ich das aktuell angemeldete Benutzerobjekt von der Federsicherheit?
- 26. Wie kann überprüft werden, ob der aktuell angemeldete Benutzer das servergespeicherte Profil verwendet?
- 27. Wie wird der Lenker entfernt?
- 28. Wie können Trennzeichen ("") in der .txt-Datei entfernt werden?
- 29. Wie kann der Fokus mit deklarativen/funktionalen Stilbibliotheken wie Redux und ReactJS gehandhabt werden?
- 30. Kann Ereignis im Fokus ausgelöst werden?
Ich schaute auf diese Prozedur, versuchte es zu benutzen, und es hat nicht funktioniert. Jetzt habe ich es nochmal gemacht und es funktioniert. Es ist Zeit, schlafen zu gehen :) – LukLed
Wie es auftritt, die Einstellung Self.ActiveControl: = Nil tut den Job auch und ist intuitiver. Offensichtlich nicht für mich .... – LukLed
@LukLed: Toller Tipp, Danke! – Sharken