2009-08-04 16 views
0

Welcher Art ist der Zugriff auf Komponenten (z. B. Imagelist, Timer) aus einer Formularinstanz? Ich arbeite an Multi-Form-Windows-Formularanwendung auf .NET Compact Framework Version 3.5 SP1 mit C#. Ich habe eine Controller-Klasse für jedes Formular für die MVC-Implementierung zugeordnet. Hier ist meine Beispiel-Controller-Klasse.Zugriff auf Windows Form Components

public class Controller 
{ 
     public void Init(Form f) 
     { 
      //f.Controls will allow access to all controls 
      //How shall I access imagelist, timer on form f. 
     } 
} 

Meine Frage ist, wie kann ich auf nicht visuelle Komponenten zugreifen, ohne eine Leistungsreflexion zu nehmen? Alle Code-Snippets sind willkommen. Wenn Reflektion nur Weg ist, können Sie mir dann bitte einen optimalen Weg für den Komponentenzugang geben?

Danke,

Antwort

2

Sie sollten eine stark typisierte Form oder Interface-Implementierung werden geben, die entweder die Kontrollen direkt (nicht die bevorzugte Wahl) oder abstrahiert die Operationen auf dem Blick in Methoden/Eigenschaften aussetzt, die aus der aufgerufen werden kann Controller (die bevorzugte Wahl).

0

Nein, Reflexion ist nicht der richtige Weg. Um einfach das zu erreichen, was Sie anstreben, können Sie eine schreibgeschützte Eigenschaft bereitstellen, die das Steuerelement zurückgibt. Zum Beispiel, sagen Sie ein ImageList namens imageList1 auf dem Formular haben:

public ImageList ImageList 
{ 
    get { return imageList1; } 
} 

Sie dann die ImageList Eigenschaft zugreifen kann einen Verweis auf imageList1 zu erhalten.

JEDOCH

Dieser stinkende Code. Was Sie sollten ausgesetzt sind Eigenschaften und Funktionen, die sich darauf beziehen, was Sie mit der ImageList tun müssen. Ihr externer Code sollte sich nicht um die bestimmte Implementierung in Ihrem Formular kümmern (mit anderen Worten, er sollte wissen, dass Sie etwas mit Bildern machen müssen und Funktionen bereitstellen, um diese Aktionen auszuführen; er sollte nicht wissen müssen, dass es ein Steuerelement ImageList ist).