2008-08-27 1 views
1

Eine Anzahl von Formularen in meinem Projekt erbt von einem Basisformular. Es ist einfach, die Controls-Auflistung der abgeleiteten Formulare zu erhalten, aber ich habe keinen einfachen Weg gefunden, auf die Komponenten-Sammlung zuzugreifen, da VS dies als privat markiert.Zugreifen auf eine Komponente in einem geerbten Formular aus dem Basisformular

Ich gehe davon aus, dass dies mit Reflektion gemacht werden könnte, aber ich bin mir nicht sicher, wie es am besten geht, nicht mit Reflektion gearbeitet zu haben.

Im Moment verwende ich eine Art klobige Abhilfe, in der ich eine Funktion GetComponents überschreiben und ein Array der Komponenten zurückgeben, die ich interessiert. Dies ist offensichtlich anfällig für Fehler, da es leicht zu vergessen ist implementieren Sie die überschriebene Funktion oder aktualisieren Sie sie, wenn Komponenten hinzugefügt werden.

Wenn jemand irgendwelche Tipps hat oder einen besseren Weg vorschlagen kann, würde ich mich freuen zu hören.

Antwort

0

Wenn Sie Bedenken haben, die Funktion zu überschreiben, dann sollten Sie sie abstrahieren.

1

Wenn Sie die Modifiers-Eigenschaft Ihrer Komponenten auf strict protected setzen, werden sie ohne die Verwendung einer Komponentensammlung zugänglich.

Bearbeiten: Die Auffindbarkeit könnte mithilfe von Reflektion über jedes Feld gehen. Obwohl das in Ihrem Fall möglicherweise suboptimal ist.

0

Legen Sie den Modifikator "Komponenten" in der Basisformklasse als geschützt fest. Entfernen Sie die Deklaration "Komponenten" in allen abgeleiteten Formularen.

Anruf dieses unter Verfahren in Form der Base Ladeereignis,

 public void SetComponentsStyle() 
    { 
     if (null != this.components) 
     { 
      foreach (Component comp in this.components.Components) 
      { 
       if (comp is ToolTip) 
       { 

       } 
       else if (comp is ContextMenuStrip) 
       { 

       } 
      } 
     } 
    } 
Verwandte Themen