Bewährtes Verfahren zum Hinzufügen von Steuerelementen zur Laufzeit

8

Wenn Sie zur Laufzeit Steuerelemente zu einem Formular hinzufügen, können Sie einen der folgenden Schritte ausführen:

%Vor%

oder

%Vor%

Ich hatte angenommen, dass sie gleich sind, und es war nur eine Frage der persönlichen Präferenz, wie man es macht, aber jemand bei der Arbeit erwähnte, dass die zweite Methode schlechter ist, da der Knopf nicht entsorgt wird, wenn das Formular entsorgt wird ( vorausgesetzt, es wurden keine Event-Handler hinzugefügt und werden festgehalten.)

Das hat mir wenig Sinn gemacht, also habe ich online nachgesehen, aber ich konnte nichts finden, was ich sagen könnte.

Weiß jemand die Antwort oder kann er mich in die richtige Richtung weisen?

    
Pondidum 09.06.2009, 15:14
quelle

7 Antworten

12

Da Spekulation eine Zeitverschwendung ist, habe ich mir meine Kopie von Reflector geworfen tatsächlicher Code. Die Parent-Eigenschaft ruft die ParentInternal-Eigenschaft auf, die wiederum value.Controls.Add (this)

aufruft %Vor%

Basierend auf diesem Code sind die Methoden äquivalent und dies ist ausschließlich eine Frage der Präferenz.

    
Jack Bolding 09.06.2009, 15:39
quelle
3

Ich kann sehen, wo die Schaltfläche Entsorgung ein Problem sein könnte, wenn Sie eine Anwendung schreiben, die während ihrer Dauer viele Formulare öffnet und schließt. Sie müssen sicherstellen, dass Sie über einen geeigneten Entsorgungscode verfügen, um sicherzustellen, dass die Anwendung nicht zu viel Speicher beansprucht.

Abgesehen davon mag ich die erste Aussage, weil sie klarer erklärt, was Ihr Code macht. Sie erstellen eine neue Schaltfläche und fügen sie den vorhandenen Steuerelementen auf der Seite hinzu. Sie können direkt nach dem Debuggen / Refactoring lesen und verstehen, was vor sich geht. In der zweiten Code-Gruppe ist dies etwas vager. Wenn Sie die erste Schaltflächendeklaration überstrichen haben und die btn.Parent = diese Anweisung gesehen haben, könnten Sie glauben, dass Sie die Schaltfläche einem neuen Formular oder etwas in diesem Sinne zugewiesen haben.

Es hört sich etwas pingelig an, aber in letzter Zeit habe ich einigen Kollegen geholfen, indem ich ihnen meinen Code gezeigt habe, und ich werde feststellen, dass es auf jeden Fall mehr als einen Weg gibt, eine Katze zu häuten Es gibt eine gewisse Art, es zu enthäuten, was sich viel besser erklärt, wenn man die Dinge in der Zukunft betrachtet.

    
Dillie-O 09.06.2009 15:25
quelle
3

Ich habe es immer vorgezogen, die Steuerelemente des Objekts zu identifizieren, denen ich das neue Steuerelement hinzufügen werde ...

%Vor%

Ich fühle, dass dies leichter zu lesen ist und Sie müssen keine Stammbaumanalyse durchführen, um herauszufinden, wer der Elternteil ist ...

Ich glaube, dass die Verwendung der .Parent-Code intern die .Controls.Add, so sollten sie das gleiche Endergebnis haben, aber für mich kommt es auf die Lesbarkeit des Codes.

Es gibt eine ähnliche Frage hier auf StackOverflow .

    
RSolberg 09.06.2009 15:20
quelle
1

Im zweiten Fall wird das Steuerelement möglicherweise nicht entsorgt, wenn das Formular ausgeführt wird (ich bin mir nicht sicher, ob es das tut oder nicht), aber es sollte trotzdem durch die nächste Garbage Collection freigegeben werden, da dies nicht passieren sollte seien Sie nach der Verfügung des Formulars hart darauf verwiesen. Das Ergebnis ist, ob die Schaltfläche mit dem Formular entsorgt wird, ist für die meisten Anwendungen kein Problem. In der überwiegenden Mehrzahl der Apps, die Formulare verwenden, ist der Benutzer der Flaschenhals. Ob Sie also auf einen oder zwei Durchläufe des Garbage Collector warten müssen, bevor eine Sammlung von Formularsteuerelementen entfernt wird, sollte sich nicht auf Ihre Designentscheidung auswirken.

>

Nachdem ich gesagt habe, bevorzuge ich

%Vor%

weil es für das, was Sie tatsächlich tun, semantisch angemessener ist. Ich verwende diese Methode immer, anstatt die Eigenschaft Control.Parent festzulegen.

    
Dathan 09.06.2009 15:31
quelle
0

Es ist wirklich eine Frage des Geschmacks. Was passiert, wenn Sie die Eigenschaft Parent auf eine Control setzen? Dieser Code stammt von .NET Reflector.

%Vor%     
PeterAllenWebb 09.06.2009 15:46
quelle
-1

Ich denke, beide ergeben dasselbe

    
Bertvan 09.06.2009 15:18
quelle
-1

Ich persönlich mag

%Vor%

Weil es expliziter und lesbarer Code ist.

    
Syed Tayyab Ali 09.06.2009 15:21
quelle

Tags und Links