Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Zugriff von anderer Klasse auf Window Control
ali42
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

Zugriff von anderer Klasse auf Window Control

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von pdelvo am .
private Nachricht | Beiträge des Benutzers
Mentor49
myCSharp.de - Member



Dabei seit:
Beiträge: 35

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Tomot
myCSharp.de - Member

Avatar #avatar-2678.jpg


Dabei seit:
Beiträge: 706
Herkunft: Düsseldorf

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Servus
myCSharp.de - Member



Dabei seit:
Beiträge: 79
Herkunft: Deutschland

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Servus am .
while (!sleep) sheep++;
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Florian Reischl
myCSharp.de - Experte

Avatar #avatar-2880.jpg


Dabei seit:
Beiträge: 1596
Herkunft: München

beantworten | zitieren | melden

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ß.
private Nachricht | Beiträge des Benutzers