none
Wie greift man auf ein selbst erstelltes Coponent Objekt zu? RRS feed

  • Frage

  • Hallo NG,

    Ich habe exemplarisch eine Komponente myComponent erstellt und in ein Formular gezogen. Wie kann ich nun in einer Methode im Formular auf diese Komponente zugreifen? Es gibt im Formular eine Collection components, doch in dieser ist mein selbst erstelltes myComponent nicht enthalten.

    Hat jemand einen Tipp für mich?

    Das obige Beispiel liefert auf dem Button Click nur das notifyIcon, jedoch nicht meine Komponente.

    Vielen Dank und viele Grüße

    Niels W.


    Viele Grüße
    Niels W.

    Freitag, 25. Mai 2012 08:26

Antworten

  • Hallo Niels,

    ich hab mir mal ein Testprojekt angelegt und mir ne Component erstellt.

    Das sieht bei mir dann aber etwas anders aus:

        public partial class myComponent : Component
        {
            public myComponent()
            {
                InitializeComponent();// <- fehlt das bei Dir?
            }
    
            public myComponent(IContainer container)
            {
                container.Add(this); // <- fehlt das bei Dir?
    
                InitializeComponent(); // <- ??
    
                System.Windows.Forms.MessageBox.Show("Test");
    
            }
        }

    Ich hab da noch eine Messagebox aufgerufen beim Start, die mir anzeigt ob die Component initialisiert wird.

    Grüße

    • Als Antwort markiert Niels_W Freitag, 25. Mai 2012 10:17
    Freitag, 25. Mai 2012 08:55

Alle Antworten

  • Hallo Niels,

    ich hab mir mal ein Testprojekt angelegt und mir ne Component erstellt.

    Das sieht bei mir dann aber etwas anders aus:

        public partial class myComponent : Component
        {
            public myComponent()
            {
                InitializeComponent();// <- fehlt das bei Dir?
            }
    
            public myComponent(IContainer container)
            {
                container.Add(this); // <- fehlt das bei Dir?
    
                InitializeComponent(); // <- ??
    
                System.Windows.Forms.MessageBox.Show("Test");
    
            }
        }

    Ich hab da noch eine Messagebox aufgerufen beim Start, die mir anzeigt ob die Component initialisiert wird.

    Grüße

    • Als Antwort markiert Niels_W Freitag, 25. Mai 2012 10:17
    Freitag, 25. Mai 2012 08:55
  • Hallo Niels,

    verwende einfach this.myComponent1, denn diese Variable wird ebenfalls angelegt.
    Die private Container Variable component wird vom Designer nur für Komponenten verwendet,
    die einen Konstruktor mit IContainer haben, und sich dort eintragen:

        public MyComponent(IContainer container)
        {
           container.Add(this);
        }

    Der einzige "Nährwert" zur Laufzeit besteht darin, dass für solche Komponenten Dispose beim Freigeben des Formulars aufgerufen wird.
    Was dann Sinn gibt, wenn Du eine Komponente hast, die unmanaged Ressourcen verwendet.

    Mehr siehe Komponenten und Container, was aber erst Nutzen bringt, wenn Du spezielle Designer für die Komponente entwerfen willst.

    Gruß Elmar


    Freitag, 25. Mai 2012 09:13
    Beantworter
  • Das war es. Ich keine neue Komponente über den Dialog Neu in VS erstellt, sondern einfach eine Klasse erstellt und die Vererbung manuell eingetragen... Vielen Dank!!!

    @Elmar Boye:

    Ich hatte vergessen zu schreiben, dass ich auf die Komponente ohne Name zugreifen möchte (Alle Komponenten von meinem Typ in einem Formular). Der direkte Zugriff war mir durchaus klar. Aber dennoch vielen Dank für die Antwort!


    Viele Grüße
    Niels W.

    Freitag, 25. Mai 2012 10:20