![]() |
Focus setzen bei RadioGroup
Hallo Foristen,
ich arbeite mit D2007 und habe ein Problem, das mir beinahe lächerlich vorkommt: Um einen Arbeitsgang abzukürzen, steuere ich eine RadioGroup mit RadioGroup1.SetFocus an. Der Compiler mosert nicht, aber es gibt einen Laufzeitfehler EInvalidOperation 'Deaktiviertes oder unsichtbares Fenster kann den Fokus nicht erhalten'. In einem Testprogramm habe ich nichts als einen Button und diese RadioGroup auf dem Formular, es gibt aber die gleiche Fehlermeldung. Kann mir jemand bitte die Tomaten von den Augen nehmen? OsCor |
Re: Focus setzen bei RadioGroup
Ist das Fenster sichtbar, wo du den Focus setzen willst? In welchem Zustand setzt du denn den Focus (create, show, activate)?
|
Re: Focus setzen bei RadioGroup
Ist diese RadioGroup enabled?
|
Re: Focus setzen bei RadioGroup
Wie hast du die RadioGroup erzeugt?
|
Re: Focus setzen bei RadioGroup
Hallo zeras,
die RadioGroup befindet sich im selben Formular wie der Button, der nach einigen anderen Aktionen (Füttern eines Stringgrids) den Fokus wieder an die RadioGroup zurückgeben will. @s.h.a.r.k Ja. @Wolfgang Mix Beim Erstellen des Formulares. Den Begriff Fenster verstehe ich nicht so recht in diesem Zusammenhang. OsCor |
Re: Focus setzen bei RadioGroup
Er meint das Formular ;)
|
Re: Focus setzen bei RadioGroup
Zitat:
Lass doch mal das Füttern des SG raus und schaue, was passiert. Drückst du auf den Button und dann werden die Aktionen gestartet, oder passiert das irgendwie anders? Das Testprogramm kann dann doch nicht so gross sein. Dann poste es doch mal. |
Re: Focus setzen bei RadioGroup
Erstelle 'mal auf einem neuen Formular eine neue RadioGroup mit
2 Items über den Objektinspektor und teste noch einmal |
Re: Focus setzen bei RadioGroup
So sieht das Testprogramm aus. Nach Drücken des Buttons sollte eigentlich die Radiogroup aktiv und die Itemauswahl per Tastatur möglich sein.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) RadioGroup1: TRadioGroup; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin RadioGroup1.SetFocus; end; end. |
Re: Focus setzen bei RadioGroup
Was macht denn
Delphi-Quellcode:
RadioGroup1.Item2.SetFocus;
|
Re: Focus setzen bei RadioGroup
Gar nichts, das geht doch gar nicht.
|
Re: Focus setzen bei RadioGroup
Doch, du musst die Items über das Objektinspektormenü erzeugen
und nicht über die Toolpalette RadioButtons dahin schieben. |
Re: Focus setzen bei RadioGroup
Sein Quellcode funktioniert aber mit D2010! Ich hatte vorher genau das probiert. Ich habe keinerlei Einträge auf der RadioGroup. Sicher, dass Enabled und Visible auf True stehen? (von Form1 und RadioGroup1)
Hänge mal das Projekt komplett an. |
Re: Focus setzen bei RadioGroup
@Wolfgang
Ich ziehe aus der Toolpalette eine RadioGroup auf die Form und benenne die Items anschließend im Objektinspektor. Dann setze ich den ItemIndex auf 0. @Armin Bisher konnte ich mir meist selber helfen, deshalb die Frage: Einfach alle Dateien eines Projektes als Attachment hier anhängen? @all Das Fenster mit dem Hinweis auf den Fehler zeigte die Möglichkeit an, diesen speziellen Fehler so nicht mehr anzuzeigen. Das habe ich irgendwann angekreuzt. Wie kriege ich denn das wieder so hin, wie es vorher war? Oswald |
Re: Focus setzen bei RadioGroup
Zitat:
Hätte mir das Projekt eben bei Zeit mal angeschaut. Was passiert eigentlich, wenn du eine komplett neue VCL-Anwendung aufmachst und genau das machst was du bisher hast? Ein RadioGroup mit Button drauf klatschen und den Code rein schreiben. Bei mir hat das, wie schon oben erwähnt ohne Probleme funktioniert. Ansonsten würde ich auf einen Fehler von Delphi tippen und dann käme die Frage nach allen installieren Updates. |
Re: Focus setzen bei RadioGroup
Was ich gepostet habe, ist ja die komplett neue VCL-Anwendung. Das eigentliche Programm, an dem ich schreibe, ist viel zu groß, um hier was reinzustellen - und möglicherweise kann ich das Problem ja auch mit irgendeinem Workaround umschiffen. Aber noch hoffe ich, daß wir das Problem lösen können.
Ich dachte an einen Fehler in meinem Code und habe deshalb diesen kleinen Versuch gestartet. CodeGear™ Delphi® 2007 für Win32® Version 11.0.2804.9245 steht in der Versionsinfo. Edit: Noch ein paar Tests gemacht: Wenn ich mit TabOrders arbeite, und die RadioGroup mit TabOrder=1 versehe und den Button mit 0, dann muß ich, um vom Button auf die Group zu kommen, die Tabulatortaste 2 mal betätigen. Wo geht die hin beim ersten Mal? Oswald |
Re: Focus setzen bei RadioGroup
Du kannst hier ja via ActiveControl (Form1.ActiveControl) schauen, welches Control denn den Focus erhält.
|
Re: Focus setzen bei RadioGroup
Ich habe noch ein wenig probiert. Wenn Setfocus im OnCreate des Formulars kommt, dann kommt auch diese Fehlermeldung. Kann es sein, dass du zwischendurch dieses Formular deaktivierst oder dass ein anderes Formular gerade aktiv ist?
|
Re: Focus setzen bei RadioGroup
Nein, eigentlich nicht.
Der Vorgang ist tatsächlich so simpel: Neue VCL-Anwendung, RadioGroup und Button drauf ziehen und im OnCreate des Formulars RadioGroup1.SetFocus eingeben. Das aktive Objekt werde ich jetzt mal suchen. Edit: Weia, wie macht man das? |
Re: Focus setzen bei RadioGroup
Vielleicht probierst du es mit einzelnen Radiobuttons und nicht mit einer Radiogroup. Sollte doch auch gehen. Ich habe mit D2009 getestet.
|
Re: Focus setzen bei RadioGroup
Habe ich auch gerade. Das funktioniert bei mir auch.
Möglicherweise wird zunächst mal das Objekt RadioGroup an sich angesteuert und dann erst die einzelnen Items. Das würde für mich bedeuten, daß ich halt die Gruppe mit dem Rahmen und der Caption weglasse, da anscheinend das ausschließliche Checken auch so funktioniert. Das Setzen des Focus funktioniert aber auch so nicht, lediglich das Springen mit dem Tabulator funktioniert ohne Zwischenschritt. Immerhin. Danke für den Hinweis mit den einzelnen Radiobuttons. |
Re: Focus setzen bei RadioGroup
Nochmal eine Ergänzung:
Delphi-Quellcode:
<-- funktioniert nicht
Form1.ActiveControl := RadioGroup1;
Delphi-Quellcode:
<-- funktioniert und setzt den angesteuerten Button auf Checked
Form1.ActiveControl := RadioButton1;
Ein Workaround habe ich jetzt also. Danke für die Hilfe! Oswald |
Re: Focus setzen bei RadioGroup
Zitat:
(Die RadioGroup hat mir auch schon einige schlaflose Nächte bereitet, da sie u.a. einen Click auslöst, wenn das Formular geöffnet wird und sie den Focus hat.) |
Re: Focus setzen bei RadioGroup
Im OnActivate gibt es tatsächlich keine Fehlermeldung, was mir im Nachhinein auch völlig logisch vorkommt: Die Form ist schon da mit allen Komponenten, was bei OnCreate vermutlich nicht der Fall ist. Wieder was gelernt.
Was ich immer noch nicht weiß: Wie kriege ich heraus, welche Komponente zwischenzeitlich den Focus hat, wenn ich von einem Button mit dem Tabulator zur RadioGroup weiterschalten will und dafür zweimal TAB drücken muß? Ich weiß noch nicht, wie ich mit Form1.ActiveControl arbeiten kann. Oswald |
Re: Focus setzen bei RadioGroup
Welches Control den Focus hat, bekommst du mit "ActiveControl" raus. Was verstehst du den nicht daran? Du kannst das ActiveControl selber setzten wie es in ein paar Posts vorher auch schon steht. Und kannst dies abfragen und ggf. damit weiter arbeiten
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz