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
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
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
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
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++;
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
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ß.