2011-01-06 6 views

Antwort

8

Nach SWT: The Standard Widget Toolkit, Volume 1, forceFocus():

Kräfte die Kontrolle erhalten Tastatur Ereignisse. Bedienelemente, die normalerweise keine Tastatureingaben akzeptieren, verwenden den Fokus mit dieser Methode. Wenn der Fokus aus irgendeinem Grund nicht zugewiesen werden kann, wird false zurückgegeben.

auch:

Generell Fokus zwingen ist etwas, das Sie nie tun wollen. Zum Beispiel ist das Erzwingen des Fokus auf ein Label nicht sehr nützlich, da die Labels nicht in einer Weise zeichnen, die angibt, sie Eingabe akzeptieren können. Forcing Fokus zu einem Steuerelement, das es nicht erwartet kann Benutzer verwirren, weil sie keine Idee haben, wo ihre Tastenanschläge gehen. Anwendungsprogramme sollten immer setFocus() verwenden, um den Fokus zuzuweisen.

3

kommend in Art und Weise spät auf diesem einem, aber ich habe gerade eine verlängerte Kopf-Schlage gegen-Wand-Sitzung auf etwas im Zusammenhang mit diesem und dachte, dass ich einen schnellen Bericht tun würde:

Wenn Ihre Steuer hat Kinder, die setFocus(myControl) wird eine Tiefensuche in der untergeordneten Struktur durchführen und den Fokus auf das unterste erste Kind setzen. Auf der anderen Seite, forceFocus(myControl) wird nur Fokus auf myControl gesetzt und damit getan haben.

Ich hatte eine Situation mit einem nicht modalen Dialog mit einem GridLayout, wobei die meisten Rasterzellen eine Gruppe von Canvas-Unterklassenobjekten waren, die den Fokus benötigten. (Ja, das ist ein bisschen seltsam, aber ich wollte in der Lage sein, über einer Zelle zu schweben und Sachen hinein zu tippen.) Das letzte Steuerelement im Gitter war ein "Fertig" -Knopf, den ich als Standardauswahl eingab.

Als die Maus die Canvas-Zellen verließ, machte ich eine setFocus(myDialogShell), die sofort den Fokus auf das erste Canvas-Element setzte und verhinderte, dass der "fertig" -Knopf das Ganze ereilte und das ganze schmutzige Geschäft beseitigte. Auf der anderen Seite hat forceFocus(myDialogShell) den Trick gemacht.

Verwandte Themen