Entwickler-Ecke

WinForms - ToolStripStatusLabel - Text aus einer Klasse Verändern?


KarlSchmidberger - Do 04.12.08 17:48
Titel: ToolStripStatusLabel - Text aus einer Klasse Verändern?
Hallo,

ich möchte aus einer C#-Klasse den ToolStripStatusLabel-Text
der sich auf einer Form befindet verändern ?

Anbei meine ersten Versuche.

Wenn ich die Funktionen "HlsAcTssl" und "HlsWriteTssl" mit einem Button auf der Form starte gehts gut!

Vielen Dank
Karl




C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
//Dieser Block ist im Form-Code-Bereich 
protected static String _TSSL_Inhalt;

public String HlsAcTssl
{
    get { return _TSSL_Inhalt; }
    set { _TSSL_Inhalt = value; }
}

public void HlsWriteTssl() 

    _WriteTssl();
}

private void _WriteTssl() 

    //tSSL1 == ToolStripStatusLabel
    this.tSSL1.Text = _TSSL_Inhalt; 
    this.Refresh(); 
}



Wenn ich das ganze aus einer Klasse aufrufe ... wird der String nicht angezeigt.


C#-Quelltext
1:
2:
3:
4:
5:
6:
//Dieser Block ist in einer Klasse

HLSLdapForm fo = new HLSLdapForm();

fo.HlsAcTssl = "Fertig";
fo.HlsWriteTssl();


JüTho - Do 04.12.08 18:22
Titel: Re: ToolStripStatusLabel - Text aus einer Klasse Verändern?
Hallo Karl und :welcome:

nach dreimaligem Lesen habe ich halbwegs verstanden, worum es Dir geht (ich hoffe das jedenfalls). Aussagefähige Bezeichner und eine sinnvolle Gliederung hätten mir doch sehr geholfen; außerdem finde ich keinerlei Zusammenhang zwischen Deinen Code-Auszügen und einem ToolStripStatusLabel.Text.

Zur Sache ist mir vor allem dies aufgefallen:
user profile iconKarlSchmidberger hat folgendes geschrieben Zum zitierten Posting springen:


C#-Quelltext
1:
2:
3:
4:
5:
6:
//Dieser Block ist in einer Klasse

HLSLdapForm fo = new HLSLdapForm();

fo.HlsAcTssl = "Fertig";
fo.HlsWriteTssl();

Was soll dieser Quatsch? (Entschuldigung, anders kann ich es nicht formulieren:) Du erzeugst innerhalb einer Methode mit new ein neues Formular, machst damit irgendetwas, ohne das Formular überhaupt anzuzeigen, und am Ende der Methode ist das Formular wieder vergessen.

Du solltest Dir die Zusammenarbeit zwischen dem Formular und der Klasse nochmals genauer überlegen. Bitte benutze dabei auch die Forumssuche; im Laufe der letzten Woche habe ich mehrfach auf die Zusammenarbeit zwischen zwei Formularen hingewiesen, das könnte auch hier helfen.

Übrigens gibt es in C# keine Funktionen, sondern nur Methoden. Aber Dein "HlsAcTssl" ist auch keine Methode, sondern eine Eigenschaft (Property).

Jürgen


KarlSchmidberger - Do 04.12.08 18:54

Hallo,

ich habe es befürchtet ;)

Sorry für die schlechte Darstellung ... ich werde mich bessern.


naja, ich veruche es noch einmal anderst zu erklären.


Ich möchte aus einer Klasse den Text von ToolStripStatusLabel (Das sich auf einer Form befindet) verändern.


ToolStripStatusLabel habe ich in der Grafischen Oberfläche VS2005 nach "tSSL1" umbenannt


< Was soll dieser Quatsch ... > habe ich verstanden, aber wie mache ich besser?

Die Form wird gestartet , per Knopfdruck wird Code ausgeführt der
sich in verschienen Klassen befindet. Diese Klassen ( Methoden :) sollen
Statusmeldungen (String) an die Statusleiste (ToolStripStatusLabel) senden.

Ziel : Der Benutzer soll aus der Statusleiste Infos bekommen!


<Du solltest Dir die Zusammenarbeit zwischen dem Formular und der Klasse nochmals
genauer überlegen.>

OK, mache ich !


Danke


JüTho - Do 04.12.08 19:36

Hallo Karl,

danke für die Ergänzungen. Damit wird es für mich deutlicher, und ich kann es noch eindeutiger sagen.

user profile iconKarlSchmidberger hat folgendes geschrieben Zum zitierten Posting springen:
ToolStripStatusLabel habe ich in der Grafischen Oberfläche VS2005 nach "tSSL1" umbenannt

Das meinte ich mit "aussagefähigen Bezeichnern". Unter "tSSL1" kann sich niemand etwas vorstellen, in etwa zwei bis drei Wochen auch Du nicht mehr. Aber mit statusLabelName oder statusLabelUser oder... würde es funktionieren.

user profile iconKarlSchmidberger hat folgendes geschrieben Zum zitierten Posting springen:
Diese Klassen ( Methoden :) sollen Statusmeldungen (String) an die Statusleiste (ToolStripStatusLabel) senden.

Eine separate Klasse hat nichts mit dem Formular zu tun und weiß vor allem nichts über dessen Controls (gemeint ist vor allem: darf nichts wissen). Die Kommunikation zwischen Formular und Klasse läuft in diesem Fall über Delegates: Das Formular übergibt der Klasse sozusagen einen Zeiger auf eine Methode des Formulars, in der das StatusLabel angepasst wird; die Klasse registriert diesen Zeiger in einer eigenen Variablen und ruft die Methode, die hinter dieser Variablen steht, bei Bedarf auf.

Diese Zusammenarbeit zwischen Formular und Klasse entspricht also in der Tat, dem was ich bei "Zusammenarbeit zwischen zwei Formularen" meinte. Da ich weiß, an welche Diskussionen ich mich erinnere, habe ich Dir mal ein paar Verweise herausgesucht:
zwei unterschiedliche label inhalt zuweisen [http://www.c-sharp-forum.de/viewtopic.php?t=88171]
Daten vom Hauptframe in den Dialog [http://www.c-sharp-forum.de/viewtopic.php?t=88318]
[FAQ] Kommunikation von 2 Forms [http://www.mycsharp.de/wbb2/thread.php?threadid=5960] und die dortigen Verweise.

Jürgen


KarlSchmidberger - So 07.12.08 19:27

Hallo,

nach mehreren Stunden Verwirrung, habe ich es endlich geschaft.

Danke

Dieser Links haben mir ebenfalls sehr geholfen.

http://www.c-sharpcorner.com/UploadFile/mosessaur/winformsdelegates09042006094826AM/winformsdelegates.aspx?ArticleID=924a59db-3961-4560-b509-c7637bb96614
http://de.wikipedia.org/wiki/Delegat_(.NET)

Vielen Dank für die Hilfen und Infos.

Karl :)