Frage

In WinForms, Fokus auf eine bestimmte Steuerung zu setzen, scheine ich immer anrufen Control.Select() aufzuwickeln und Control.Focus() es an die Arbeit.

Was ist der Unterschied, und das ist der richtige Ansatz?

War es hilfreich?

Lösung

  

Focus ist eine Low-Level-Methode in erster Linie für die individuelle Steuerung Autoren gedacht. Stattdessen Anwendungsprogrammierer sollten die Select-Methode oder die Eigenschaft Active für Kind-Steuerelemente oder die Activate-Methode für Formulare verwenden.

http://msdn.microsoft. com / en-us / library / system.windows.forms.control.focus.aspx

Andere Tipps

Focus () ist die niedrige Niveau Funktion, die den Fokus tatsächlich einstellt.

Wählen Sie () ist eine higer-Level-Methode. Es sieht zunächst iterativ nach oben in der übergeordneten Hierarchie der Kontrolle, bis er einen Behälter Kontrolle findet. Dann setzt es, dass Activecontrol-Eigenschaft des Containers (zu der gerufenen Kontrolle). Die Logik in diesem Verfahren ist jedoch nicht einfach, und es gibt eine spezielle Behandlung für Usercontrol-Container.

Für ein Beispiel dafür, wie sie unterschiedlich sind, wenn Sie ein Steuerelement für ein Forms App zu setzen versuchen, den Fokus auf auf Standard, wenn Sie es öffnen, nur (Wählen) funktioniert, wenn im Konstruktor nach InitializeComponent () aufgerufen. Focus () nicht.

Just auf diesen Thread hinzuzufügen, fand ich, dass, wenn ein Benutzer die Kontrolle zu schreiben, die andere Steuerelemente von einer Form in eine andere verschoben (neu geschaffene Form). Die ursprüngliche Form konnte nicht mehr die Kontrolle wählen, aber mit Fokus erlaubt es, dies zu tun. Ich denke, das die Antworten zu den Ebenen, betont diese Methoden bei der Arbeit. Aber es bedeutet auch, es nicht einfach genug ist, Gebrauch zu sagen Wählen Sie auf der höheren Ebene, da wählen Sie nicht mehr funktionierte wie erwartet auf der ursprünglichen Form (nicht, dass es sollte ist, ich es in eine andere Form gebracht - ich akzeptiere, dass)

Focus (), in einigen Situationen kann ein Fenster bewirken, dass die Kontrolle zu besitzen Fokus zu gewinnen, wenn es nicht den Fokus hat. Wählen Sie () keinen Fokus Greifer durch das Fenster führen.

Aus persönlicher Erfahrung habe ich eine Benutzersteuerung die Windows-ComboBox erbt. Ich hatte Code zu schreiben, um das OnEnter Ereignis außer Kraft zu setzen und ich hatte dort eine Erklärung,

If Me.Focused Then ... Else ...

Doch leider kehrte er das unerwartete Ergebnis. Wenn ich MyCustomerComboControl.Select genannt (in jedem Laden, gezeigt oder Ereignisse Activated) nannte die OnEnter Methode, aber nicht registriert es den Fokus hatte (das heißt Focused war falsch), aber wenn ich Fokus genannt hat es funktioniert. Des Weiteren arbeitete Select, wenn die Form geöffnet war das heißt, wenn ich eine andere Steuer dann ausgewählt Wieder ausgewählt, um die ursprüngliche Kontrolle war alles in Ordnung. So unter anderen Umständen anders als mein Szenario verwenden Select, weil es so oben sagt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top