vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

C# Ecke
Re: Keine Möglichkeit zwischen zwei Klassen zu kommunizieren? 
Autor: Manfred X
Datum: 24.02.16 19:01

Hallo!

Wenn der Thread in der unterg. Klasse beendet ist, wird dort ein
entsprechendes Ereignis ausgelöst.
Die Form muß eine Instanz der unterg. Klasse deklarieren und einen
Eventhandler für dieses Ereignis.
Wird das Ereignis ausgelöst (Eventhandler), kann im Formular die Datenbindung
an die (öffentliche) Liste in der untergeordneten Klasse erfolgen (per Invoke).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
 
    public class frmBack : System.Windows.Forms.Form
    {
        private bool InstanceFieldsInitialized = false;
 
        public frmBack()
        {
            if (!InstanceFieldsInitialized)
            {
                InitializeInstanceFields();
                InstanceFieldsInitialized = true;
            }
            SubscribeToEvents();
        }
 
        private void InitializeInstanceFields()
        {
            btnstart = new Button
            {
                Parent = this,
                Text = "Start"
            };
            lbo = new ListBox
            {
                Parent = this,
                Top = 50
            };
        }
 
 
        //Interne Klasse
        private class Back
        {
 
            //Öffentliche Liste          
            public List<string> lst = new List<string>();
            public delegate void FilledEventHandler();
 
            //Melde-Ereignis
            public event FilledEventHandler Filled;
 
 
            //Öffentliche Methode: Liste füllen
            public void fill()
            {
                System.Threading.Thread th = new System.Threading.Thread(iFill);
                //Füllender Thread
                th.Start();
            }
 
            //Interne Methode
            private void iFill()
            {
                lst.Clear();
                for (int i = 0; i <= 10; i++)
                {
                    lst.Add("Item" + i.ToString());
                }
                if (Filled != null)
                    Filled();
            }
        } //Back-Klasse
 
 
        //Controls in der Hauptform
        private Button btnstart;
        private ListBox lbo;
 
        //Instanz der internen Klasse
        private Back bck = new Back();
 
 
        //Click-Eventhandler
        private void btnstart_Click(object sender, System.EventArgs e)
        {
 
            lbo.DataSource = null;
            bck.fill();
        }
 
 
        //Filled-Eventhandker (von bck ausgelöstes Event)
        private void bck_Filled()
        {
            //Invoke: ZUgriff auf Control aus anderem Thread
            this.Invoke(new MethodInvoker(BindList));
        }
 
 
        private void BindList()
        {
            lbo.DataSource = bck.lst;
        }
 
 
        //Event handler
        private bool EventsSubscribed = false;
        private void SubscribeToEvents()
        {
            if (EventsSubscribed)
                return;
            else
                EventsSubscribed = true;
 
            btnstart.Click += btnstart_Click;
            bck.Filled += bck_Filled;
        }
 
 
        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // frmBack
            // 
            this.ClientSize = new System.Drawing.Size(292, 273);
            this.Name = "frmBack";
            this.Load += new System.EventHandler(this.frmBack_Load);
            this.ResumeLayout(false);
 
        }
 
 
        private void frmBack_Load(object sender, EventArgs e)
        {
            //formal
        }
 
    } //Formular
}//Namespace
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Keine Möglichkeit zwischen zwei Klassen zu kommunizieren?2.509Fabi9924.02.16 16:53
Re: Keine Möglichkeit zwischen zwei Klassen zu kommunizieren...1.374Manfred X24.02.16 19:01

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel