11 Stimmen

MFC "Warnung: Überspringen einer Nicht-Funk-Taste in der Gruppe".

Wenn ich eine alte MFC-Anwendung im Debugger von Visual Studio ausführe, sehe ich im Ausgabefenster viele Warnungen wie die folgende:

Warnung: Überspringen von Nicht-Radio-Tasten in der Gruppe.

Ich weiß, dass man in MFC Optionsfelder in Gruppen zusammenfasst, um anzugeben, welche Gruppen von Optionsfeldern zusammengehören. Wenn ich mich richtig erinnere, tun Sie dies, indem Sie die Eigenschaft "group" des ersten Optionsfeldes auf true setzen und dann die restlichen "group"-Eigenschaften der Optionsfelder auf false setzen.

Ich habe drei Fragen zu dieser Warnung.

  1. Wie kann man diese Warnung loswerden? Machen Sie müssen Sie die Eigenschaft "group" bei allen Nicht-Radio-Button-Steuerelemente auf true setzen, um um dies zu vermeiden, oder sollten Sie nur die für das erste Steuerelement nach dem letzten Optionsschaltfläche?

  2. Gibt es einen einfachen Weg, um herauszufinden herauszufinden, welche Steuerelemente oder Dialoge dieses Problem haben? Ich könnte jedes Dialogfeld öffnen und mit ihm herumspielen, bis die Warnung auftaucht. Diese Anwendung hat eine Menge Dialoge, daher wäre es schön wäre es schön, wenn es einen einfacheren Weg gäbe.

  3. Welches negative Verhalten kann auftreten, wenn Sie diese Warnung nicht beheben? Mit anderen Mit anderen Worten: Ist das überhaupt wichtig?

14voto

ryan_s Punkte 7476

Mit den Antworten hier und einigen Recherchen in alten Foren habe ich zumindest herausgefunden, wie ich meine Probleme lösen kann. Hier ist, was ich für meine oben genannten Fragen herausgefunden habe.

  1. ChrisN und Smashery schlugen vor, die Registerkarten neu zu ordnen, um sicherzustellen, dass die Optionsfelder in der richtigen Reihenfolge angeordnet sind, und das hat einige der Warnungen behoben.

    Außerdem muss für das erste Steuerelement in der Tabulatorreihenfolge nach der Optionsschaltergruppe die Eigenschaft WS_GROUP festgelegt sein (oder die Eigenschaft group im Editor auf true gesetzt sein). Dies teilt MFC mit, dass die Radiobutton-Gruppe beendet ist. Andernfalls werden alle verbleibenden Steuerelemente in der Tabulatorreihenfolge bis zur nächsten WS_GROUP die Warnung erzeugen. Nachdem ich diese beiden Dinge getan hatte, waren die Warnungen in diesen Dialogen verschwunden.

  2. Dies ist immer noch eine offene Frage. Ich habe keine gute Möglichkeit gefunden, diese Probleme zu lokalisieren, ohne jeden Dialog zu öffnen und auf Warnungen zu warten.

    Wenn Sie wissen, dass ein Dialog diese Warnung erzeugt, aber nicht wissen, welches Steuerelement sie verursacht, können Sie in der Funktion DDX_Radio() einen Haltepunkt auf den TRACE()-Aufruf setzen, der die Warnung erzeugt. Dies kann die Identifizierung des spezifischen Steuerelements, über das sich die Warnung beschwert, erleichtern.

  3. Ich stimme ChrisN zu, ich kann mir keinen anderen Grund für diese Warnung vorstellen, als dass Sie Ihre Tab-Reihenfolge überprüfen sollten. An anderer Stelle im Internet kann ich keinen anderen Hinweis auf ein Problem finden, das dies verursachen könnte.

7voto

ChrisN Punkte 16165

Die Warnung bedeutet, dass ein anderes Steuerelement als ein Optionsfeld in der Tabulatorreihenfolge zwischen dem ersten und dem letzten Optionsfeld in der Gruppe vorhanden ist. Ein Steuerelement mit dem WS_GROUP Der Stilsatz markiert den Beginn einer Gruppe.

Um dies zu beheben, verwenden Sie den Dialog-Editor, um die Reihenfolge der Registerkarten zu ändern und stellen Sie sicher, dass alle Optionsfelder fortlaufend nummeriert sind. Eine andere Möglichkeit wäre, die .rc-Datei in einem Texteditor zu öffnen und die Reihenfolge der Anweisungen innerhalb der einzelnen Dialogressourcen zu ändern (die Tabulatorreihenfolge wird einfach durch die Reihenfolge definiert, in der die Steuerelemente aufgeführt sind).

Ich denke, Sie können diese Warnung getrost ignorieren, vorausgesetzt, die Gruppierung der Optionsschaltflächen funktioniert korrekt.

1voto

Smashery Punkte 53538

Überprüfen Sie vielleicht die Reihenfolge der Registerkarten (Format/Tab Order) - es klingt, als hätten Sie eine normale Drucktaste in der Mitte einer Gruppe von Optionsfeldern. Wenn dies tatsächlich das Problem ist, können Sie es beheben, indem Sie den Menüpunkt Format/Tab-Reihenfolge verwenden und dann auf die Steuerelemente in der richtigen Reihenfolge klicken.

0voto

Aardvark Punkte 8379

Zu Punkt 2, weshalb ich vermute, dass Sie die Frage unbeantwortet lassen, kann ich mir nichts Einfacheres vorstellen, als eine Textsuche (*.rc) nach allen Dialogen mit Optionsfeldern durchzuführen. Überprüfen Sie bei jedem Treffer den Ressourcencode visuell auf dieses Problem und korrigieren Sie ihn. Ich würde das von Hand im Quellcode der Ressourcendatei machen, anstatt zu versuchen, mit dem Gui-Designer zu spielen.

0voto

Derek Punkte 1

Für was es wert ist, hatte ich 3 Radio-Buttons in der richtigen Tabulator-Reihenfolge (bestätigt in .rc-Datei mit keine Probleme danach) und immer noch Warnung erhalten. Ein Breakpoint in DDX_Radio zeigte, dass die 2. und 3. Radiobuttons als Nicht-Radio gemeldet wurden! Ich habe in der resource.h nachgeschaut und festgestellt, dass der erste Radiobutton die ID 1313 und die anderen beiden die ID 1311 und 1312 verwenden. Ich habe sie in die gewünschte Tab-Reihenfolge gebracht und die IDs entsprechend umnummeriert und das Problem war gelöst. Ich vermute, dass GetWindow GW_HWNDNEXT irgendwie mit der ID-Reihenfolge verknüpft ist und nicht mit der Tabulator-Reihenfolge, obwohl die Radiogruppe funktioniert. Hinweis: Ich verwende immer noch Visual C++ v6

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X