Laden...

Zugriff von anderer Klasse auf Window Control

Erstellt von ali42 vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.225 Views
A
ali42 Themenstarter:in
2 Beiträge seit 2009
vor 14 Jahren
Zugriff von anderer Klasse auf Window Control
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace testform
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            test.t();
        }
        public void t2(string t)
        {
            label1.Text = t;
        }
    }

    public class test
    {
        public static void t()
        {
            Form1 f = new Form1();
            f.t2("test");
        }
    }
}

Das Problem ist , dass der text des labels label1 nicht geändert wird. Kann mir da jemand helfen?

freundliche Grüße ali

1.346 Beiträge seit 2008
vor 14 Jahren

Di erstellst in der Methode t immer ein neues Objekt. So kann das garnicht funktionieren. Du musst dein aktuelles Objekt mit übergeben, dann sollte das funktionieren.

Man sollte aber überhauptnicht aus einer anderen Klasse auf die Controls zugreifen. Für sowas definiert man ein Event, welches du dann in der Form abgreifen musst.

Gruß pdelvo

M
35 Beiträge seit 2009
vor 14 Jahren

Suchen bildet (:
Zugriff auf Steuerelement aus Klasse
Nächste mal bitte erstmal suchen (Damit mein ich nicht nur die Suchfunktion, sondern auch die FAQ)

Lg Chris

691 Beiträge seit 2007
vor 14 Jahren

Hi, und herzlichen Willkommen im Forum.

Also wie ich deinen Beitrag nun interpretiere, hast du deine Hauptform und erzeugst darin eine Klasse. Mit dieser Klasse willst du nun wieder auf Form1 zugreifen. Dafür musst du dann allerdings einen anderen Ansatz wählen. Alles was du dafür wissen brauchst, steht hier drin [FAQ] Kommunikation von 2 Forms

mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de

S
79 Beiträge seit 2009
vor 14 Jahren

Hi, das müste gehen:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace testform
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            test.t();
        }
        test.SetLabelText += new SetLabelTextEventHandler(t2);

        private static void t2(objekt sender, SetLabelTextEventArgs e)
        {
            label1.Text = e.Gettext();
        }
    }

    public class test
    {
        public static void t ()
        {
            public event SetLabelTextEventHabdler SetLabelText;
            protected virtual void On SetLabelText()
            {
                 if(this.SetLabelText != true)
                 {
                        this.SetLabelText(this,new SetLabelTextEventArgs("neuer text");
                 }
            }
        }
    }
    public delegate void SetLabelTextEventHandler(object sender, SetLabelTextEventArgs e) ;
    public class SetLabelTextEventArgs()
    {
         private string newtext;
         public SetLabelTextEventArgs(string Newtext)
         {
              newtext = Newtext;
         }
         public string Gettext
         {
               get
               {
                     return newtext;
               }
         }
    }
}

Hoffe das hilft

while (!sleep) sheep++;

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Servus,

das Prinzip mit dem Events ist ok, die Benennung allerdings überhaupt nicht. Da die Klasse Text gerade nichts vom GUI wissen sollte, kann sie auch nicht wissen, dass es dort Labels gibt. Also ist SetLabelText eine wirklich sehr ungünstige Bezeichnung. Besser wäre sowas wie TextChanged oder ResultAvailable o.ä. Also jedenfalls im Kontext der Klasse Test passender Name.

herbivore

1.564 Beiträge seit 2007
vor 14 Jahren

Hallo

Möchte noch hinzufügen, dass "Gettext" auch eher ein Name für eine Methode statt für eine Property wäre.

Wenn es darum geht mitzubekommen dass sich der Wert einer Property ändert würde ich entweder einen EventHandler aller TextBox.TextChanged verwenden oder System.ComponentModel.INotifyPropertyChanged implementieren.

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.