Dies kann eine sehr schwer zu beantwortende Frage sein, da die Frage selbst zu vage ist. Lassen Sie mich etwas zu dem sagen, was ich zu diesem Problem gefunden habe.
Das Formular enthält eine Listenansicht mit Datenbindung. Die Änderung der Datenbindung wird eine Änderung an einem Registersteuerelement auslösen. Je nachdem, welches Element in der Listenansicht ausgewählt ist, werden auf dem Register einige Registerkarten angezeigt. Die angezeigten Registerkarten unterscheiden sich je nach den in der Listenansicht ausgewählten Arten von Elementen.
Wie wir alle wissen, gibt es keine Möglichkeit, einige Registerkarten auf dem Registerkarten-Steuerelement auszublenden oder anzuzeigen. Die einzige Möglichkeit, einen ähnlichen Effekt zu erzielen, besteht darin, die Registerkarten im Registerkarten-Steuerelement zu löschen und Registerkarten hinzuzufügen.
Es scheint, dass diese Beziehung auslöst, dass das Formular unerwartet aktiviert wird. Wenn sich der Fokus des übergeordneten MDI-Formulars ändert, werden die untergeordneten Formulare in der Reihenfolge neu gezeichnet, und wenn das Formular erneut gezeichnet wird, werden die Änderungen am Registersteuerelement aktualisiert und ausgelöst, und das Formular wird aktiviert. Ich habe die Kette von all diesen nicht vollständig erforscht, da sie tief in den Rahmen selbst gehen können. Das Debuggen hilft überhaupt nicht, da der Aktivierungsteil nur zu externem Code führt, in den ich nicht debuggen kann. Das Setzen von Haltepunkten auf den Code zum Entfernen und Hinzufügen von Registerkarten funktioniert nicht so gut. Der Breakpoint wird nie getroffen, aber es ist ziemlich sicher, dass der umgebende Code den Unterschied macht. Dies ist ein Teil, den ich immer noch verwirre. Warum der Breakpoint nie getroffen wird, aber das Kommentieren des umgebenden Codes tatsächlich einen Unterschied macht. Ich werde mich sehr freuen, wenn mir jemand die Verwirrung erklären kann.
Jetzt meine Lösung. Ich gehe zu dem Code, der die Registerkarten entfernt und hinzufügt. Anstatt jedes Mal Tabs zu entfernen und hinzuzufügen, speichere ich die Tabs, die zum Gehen führen, in einer Sammlung und vergleiche diese Sammlung mit den Tab-Einstellungen der aktuellen Registerkarte. Wenn sie gleich sind, ist keine Änderung erforderlich.Wenn sie nicht identisch sind, wird die Registerkarte gelöscht und erneut ausgeführt. In meinem problematischen Fall sollten die Registerkarten nie aktualisiert werden, so dass die Tab-Seite nicht gelöscht und neu hinzugefügt werden muss. Erstaunlicherweise löst diese Änderung mein Problem.
Obwohl ich glaube, dass meine Art, das Problem zu beheben, nicht oberflächlich ist, habe ich es versäumt, die ganze Geschichte auszugraben. Wenn jemand, nachdem er meine Geschichte gehört hat, irgendeine Idee von der ganzen Geschichte hat und irgendeinen Vorschlag für eine bessere Lösung hat, werde ich sehr, sehr glücklich sein, ihm zuzuhören.
Vielen Dank.