Führen Sie den Komponentencode kurz vor oder nach dem Ereignis von Form_Load in .NET -Winforms aus?

StackOverflow https://stackoverflow.com/questions/2265776

  •  20-09-2019
  •  | 
  •  

Frage

Ich habe eine Komponente, die mit einer anderen Komponente in Konflikt steht, die einige interne Übersetzungen abwickelt.

Was passiert, ist, dass Business Logic -Komponenten ausgeführt werden, dann das Übersetzungssystem ausgeführt wird, das die in der Form vorhandenen Texte aufnimmt und versucht, sie zu übersetzen.

Das Problem ist, dass der Text jetzt Dinge wie Zahlen, Daten, Datenbank-Text usw. enthält. Bevor die Geschäftslogik ausgeführt wurde, waren diese Steuerelemente entweder leer oder enthielt Dummy-Text, die für die Übersetzung vorbereitet wurden.

Ich frage mich, wie ich eine Komponente haben kann, die ich in einem Formular zu einem bestimmten Zeitpunkt in der Lebensdauer des Formulars ausführen kann.

Wenn ich beispielsweise den beleidigenden Code aus der Business Logic -Komponente entferne, so dass er bei der Konstruktion nichts bewirkt, dann funktioniert die Übersetzung, und wenn ich die Methode anrufe, habe ich diesen Code von Form_Load auf die Art und Weise bewegt, dies funktioniert auch gut.

Ich frage mich also, gibt es eine Möglichkeit für mich, aus einer Komponente (dh von abgestammt von Komponente, keine visuelle Steuerung), um Code kurz vor oder nach form_load oder zumindest nach allen anderen Komponenten und Steuerelementen eingerichtet zu haben?

Es scheint kein Link aus der Komponente zurück zum Formular zu sein, so dass ich auch nicht möglich ist, wenn ich mich in das Ladungsereignis anschließe.

Oder bellt ich den falschen Baum?

War es hilfreich?

Lösung

Mir ist nicht klar, warum Sie dies nicht einfach lösen konnten, indem Sie die Methode einer Komponente aus dem Last -Ereignis -Handler des Formulars explizit aufrufen.

Eine Komponente auf die Form, auf die sie fallen gelassen wird, aufmerksam machen, ist möglich. Der Designer kann überredet werden, eine Eigenschaft der Komponente in die Forminstanz zu initialisieren. Dies ist eine Technik, die beispielsweise von ERRORPROVIDER verwendet wird. Sie malt die Fehlersymbole auf dem Formular. Dies könnte dann erweitert werden, um die Komponente das Lastereignis des Formulars abonnieren zu lassen. Hier ist ein Beispiel:

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
  public partial class Component1 : Component {
    public Component1() {
      InitializeComponent();
    }
    public Component1(IContainer container) {
      container.Add(this);
      InitializeComponent();
    }

    [Browsable(false)]
    public ContainerControl Host {
      get { return mHost; }
      set {
        if (mHost == null && value as Form != null && !DesignMode) {
          (value as Form).Load += Initialize;
        }
        mHost = value;
      }
    }
    private ContainerControl mHost;

    public override ISite Site {
      set {
        base.Site = value;
        if (value != null) {
          // Assign Host at design time
          IDesignerHost service = value.GetService(typeof(IDesignerHost)) as IDesignerHost;
          if (service != null) {
            IComponent rootComponent = service.RootComponent;
            this.Host = rootComponent as ContainerControl;
          }
        }
      }
    }
    private void Initialize(object sender, EventArgs e) {
      Console.WriteLine("initializing...");
    }
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top