C++ FormCreate: Focus auf Edit1 setzen-> Fehler

[DRO] Rip

Cadet 3rd Year
Registriert
Mai 2008
Beiträge
49
Hey, habe mal wieder Ein Problem, und zwar will ich Einen Fokus auf ein Editfeld beim Start des Programmes setzen. Er gibt mir aber die Fehlermeldung:
"Deaktiviertes oder Unsichtbares Fenster kann den nicht Fokus erhalten."

Der Quelltext:
Code:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit1 -> SetFocus();
}

Das Programm wird korrekt ausgeführt und der Fokus wird auch gesetzt, aber die Fehlermeldung nervt auf dauer!

danke schon mal an alle, die mir helfen!

mfg Rip
 
Hi!

Das selbe Problem habe ich hier auch reproduziert.

Lösung?


Gruß,
Martin
 
Ein Formular mit ein Edit Feld und im Konstruktor ein SetFocus() auf das Edit?

Meines Wissens nach kommt die Anzeige des Forms erst nach dem Konstruktor - weshalb ihr mit den OnShow-Ereignis arbeiten müsst. Muss aber gestehen, genau weiss ich es auch nicht :rolleyes:

Gabs da nicht was von der IDE selbst?
Reihenfolge der Elemente einstellen oder irgendwas unter Eigenschaften? :confused_alt:

Hmm... da fällt mir nur auf die Schnelle ein: Bool erstellen, im Konstruktor auf 0 setzen und beim Anzeigen der Form abfragen ob 0, wenn ja auf 1 stellen und Edit fokussieren... :freak:
 
wie?
meinst du beim editfeld TabOrder auf 0 setzen?
also das funktioniert auf jeden fall n icht, habe ich gerade ausprobiert und die Form selber hat diese Eigenschaft nicht... -.-

gibts nicht noch ne Lösung?

lg Rip
 
Richtig, im FormCreate ist das Formular noch nicht sichtbar (es wird ja gerade erst erzeugt). Davon abgesehen soll man im C++-Builder FormCreate nicht benutzen sondern den Code in den Konstruktor hängen - hat sonst ziemlich lästige Nebenwirkungen im Zusammenhang mit Exceptions. Daher ist die Fehlermeldung vom Builder völlig berechtigt.

Entweder sollte es funktionieren, dem Edit im OnShow den Focus zu verpassen (alle Window-Controls haben übrigens die Eigenschaft CanFocus, die false zurück gibt, wenn das Element den Focus nicht erhalten kann - es könnte ja z.B. auch noch zusätzlich auf Visible=false gesetzt sein) - oder aber man setzt in der Eigenschaft ActiveControl des MainFormulars einfach das Edit ein. Alternativ bleibt auch noch, die TabOrder zu setzen (Rechte Maustaste auf's Formular -> Tabulatorreihenfolge), aber das muss inhaltlich nicht immer richtig sein - also dass dieses oder jenes Eingabefeld mitten auf dem Formular das "erste" in der Liste ist.
 

Ähnliche Themen

Zurück
Oben