Wie kann man die Tab-Reihenfolge in einem Win32-Dialog programmgesteuert ändern?
Frage
Oft muss ich einem Dialog ein Steuerelement hinzufügen, nachdem der Dialog über die Dialogvorlage und CreateDialogIndirect generiert wurde.In diesen Fällen wird die Tab-Reihenfolge durch die Dialogvorlage festgelegt und es gibt keine offensichtliche Möglichkeit, die Tab-Reihenfolge durch Einbinden eines neu erstellten Steuerelements zu ändern.
Lösung
Ich habe kürzlich entdeckt, dass Sie SetWindowPos verwenden können, um dies zu erreichen.Bestimmen Sie, nach welchem Steuerelement Sie das neue Steuerelement in der Tab-Reihenfolge einfügen möchten, und verwenden Sie dann SetWindowPos wie folgt:
SetWindowPos(hNewControl, hOldControl, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
Dadurch wird die Z-Reihenfolge der Steuerelemente geändert, wodurch wiederum die Tab-Reihenfolge festgelegt wird.
Andere Tipps
Ich weiß, dass dies eine alte Frage ist, aber hier erfahren Sie, wie man sie zur Kompilierungszeit macht (was in den allermeisten Fällen vorzuziehen ist):http://msdn.microsoft.com/en-us/library/7039hzb0(v=vs.80).aspx
Meine Lieblingsmethode:
- Wählen Sie im Menü „Ansicht“ die Option „Tab-Reihenfolge“.
- Wählen Sie „Interaktiv zuweisen“.
- Doppelklicken Sie neben dem Steuerelement, das Sie in der Registerkarte in der Registerkartenreihenfolge sein möchten.
- Klicken Sie für jedes der anderen Steuerelemente auf das Feld für die Tabulatorreihenfolge.
- Klicken Sie überall im Formular, um Ihre Änderungen zu speichern und den Registerkarte Bestellmodus zu beenden, oder drücken Sie den Registerkarte ESC, um den Registerkarte zu beenden, ohne Ihre Änderungen zu speichern.