lima-city: Webhosting, Domains und Cloud
0 Pluspunkte 0 Minuspunkte

Ich habe dieses C# Plugin

namespace Custom_Query {

    public class Plugin: IPlugin {
        public Plugin() {
            // constructor logic 
        }

        public IPluginHost myHost = null;
        public System.Windows.Forms.UserControl myMainInterface = new ctlMain();

        public IPluginHost Host {
            get {
                return myHost;
            }
            set {
                myHost = value;
            }
        }

        public System.Windows.Forms.UserControl MainInterface {
            get {
                return myMainInterface;
            }
        }

        public void Initialize() {}

        public void Dispose() {}

    }
}

Und dieses UI dazu

namespace Custom_Query {

    public class ctlMain: System.Windows.Forms.UserControl {

        public ctlMain() {

            InitializeComponent();

        }

        protected override void Dispose(bool disposing) {
            if (disposing) {
                if (components != null) {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }

        #region Component Designer generated code

        private void InitializeComponent() {

        }

        #endregion

        private void ctlMain_Load(object sender, System.EventArgs e) {

        }

        private void button1_Click(object sender, EventArgs e) {
            this.Host.Feedback("Hello from Plugin 1", this);
        }
    }

}

Wieso kann ich im ctlmain nicht 

this.Host.Feedback("Hello from Plugin 1", this);

 machen?

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Host ist ein Property deiner Plugin Klasse (Plugin : IPlugin) und existiert in ctlMain garnicht. ctlMain ist nur ein UserControl und kennt den Host nicht. Zusätzlich kommt meist noch dazu: Feedback(...) erwartet sehr wahrscheinlich als 2. Parameter ein IPlugin (damit der Host weiß, welches Plugin die Meldung sendet). In ctlMain ist this aber ein ctlMain, kein IPlugin. Füge der ctlMain Klasse diese 2 Properties hinzu

public IPluginHost Host { get; set; }
public IPlugin PluginContext { get; set; }

Im Plugin beim Setzen des Hosts das UI explizit setzen.

public IPluginHost Host
{
    get => myHost;
    set
    {
        myHost = value;
        if (myMainInterface is ctlMain ui)
        {
            ui.Host = myHost;
            ui.PluginContext = this; // wichtig: IPlugin-Referenz
        }
    }
}
von (529 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2,512 Fragen

3,025 Antworten

281 Kommentare

13 Nutzer