Forum: PC-Programmierung C# Windows Forms Form1 Form 2 Label text durch Button setzen


von Pala (Gast)


Lesenswert?

Wie kann ich in Form 1 ein Label setzen, indem ich in Form 2 ein Button 
drücke? Form 2 ist das Label aus FRorm 1 nicht bekannt

 Kenne mich mit C# nicht aus. Wie wäre es mit:
1
// Form 1
2
public void MAM()
3
        {
4
            lblINIT_Test.Text = "Der Test ist erfolgreich initialisiert. Auf Test starten drücken";
5
        }
6
7
// Form 2
8
Form1.MAM ();

Also das die Methode aus Form 1 in Form 2 aufgerufen wird. Ich weiß 
nichtmal, ob sotwas in C# funktioniert

von Pala (Gast)


Lesenswert?

>
> // Form 2
> Form1.MAM ();
>
> Also das die Methode aus Form 1 in Form 2 aufgerufen wird. Ich weiß
> nichtmal, ob sotwas in C# funktioniert

also wie ein Funktionsaufruf in C. Müsste doch so klappen?

von moep (Gast)


Lesenswert?

Klar klappt das.
Wenn du die Methode in Form1 jedoch nicht gerade static machst brauchst 
du in Form2 dazu natürlich eine Referenz auf Form1.

von Pala (Gast)


Lesenswert?

moep schrieb:
> natürlich eine Referenz auf Form1.

wie macht man das?

von Miro V. (miro_v)


Lesenswert?

Pala schrieb:
> Wie kann ich in Form 1 ein Label setzen, indem ich in Form 2 ein Button
> drücke? Form 2 ist das Label aus FRorm 1 nicht bekannt

Hierzu verwendet man sogenannten "delegates". 
http://www.hinzberg.net/csharp/csharp/csharp/delegates.html

von Pala (Gast)


Lesenswert?

das geht sicherlich einfacher

von Schlaumaier (Gast)


Lesenswert?

In VB schreibe man wenn man aus Form2 aufruft. 
Form1.name_des_button.text = "klick mich".

Sollte in Visual-C ähnlich gehen.

von Pala (Gast)


Lesenswert?

Schlaumaier schrieb:
> In VB schreibe man wenn man aus Form2 aufruft.
> Form1.name_des_button.text = "klick mich".
>
> Sollte in Visual-C ähnlich gehen.

was hat das mit meiner sache zu tun?

von Pala (Gast)


Lesenswert?

moep schrieb:
> Wenn du die Methode in Form1 jedoch nicht gerade static machst brauchst
> du in Form2 dazu natürlich eine Referenz auf Form1.

mit static funktioniert lbl nicht mehr. und was meinst du mit Referenz?

von Schlaumaier (Gast)


Lesenswert?

Pala schrieb:
> was hat das mit meiner sache zu tun?

In den man sich das Leben einfach macht und die Label vorher einfach 
erstellt und Visible = false setzt. Da du keine Label-Invasion machst 
sollte das so reichen. Danach einfach mit Varianten des Befehl das Label 
positionieren, und die Eigenschaften setzen etc.

von Pala (Gast)


Lesenswert?

Schlaumaier schrieb:
> In den man sich das Leben einfach macht und die Label vorher einfach
> erstellt und Visible = false setzt. Da du keine Label-Invasion machst
> sollte das so reichen. Danach einfach mit Varianten des Befehl das Label
> positionieren, und die Eigenschaften setzen etc.

wo ist denn der Unterschied in der Umsetzung, ich visible true zuweise 
oder einen Text=?

von Pala (Gast)


Lesenswert?

ich möchte doch nur einen simplen Methodenaufruf realisieren.

von Schlaumaier (Gast)


Lesenswert?

ganz einfach.  Du erstellst in Form 1 die max. mögliche Anzahl an Label 
die du brauchst. Nun kannst du (musst aber nicht) die an ein Array 
übergeben.

Dann setzt du alle Label auf Visable = FALSE.

In Form 2 passiert bei deinen Klick auf den Button folgendes.

form1.label(1).visable  = true
form1.label(1).Top = form1.top + 200 ' positioniert die Label falls 
nötig
form1.label(1).Top = form1.left + 100
form1.label(1).backcolor = color.white ' Farbe falls nötig
form1.label(1)forecolor = color.black

form1.label(1).text = "In bin ein feines label"

Der Code geht davon aus das die Label in ein Array sind.

Ist zwar VB-Code aber sollte in VC genau so gehen.

von Miro V. (miro_v)


Lesenswert?

Benutz nen delegate, einfacher und flexibler geht es nicht. Ist auch gar 
nicht so kompliziert wie es aussieht.

von Fabian (Gast)


Lesenswert?

Wenn Du Form2 erstellst, gibst Du ihm einfach eine Referenz mit. Wenn Du 
etwas mehr Code posten würdest, könnte ich es Dir auch konkret sagen.

von Fabian (Gast)


Lesenswert?

Form1:
1
    public partial class Form1 : Form
2
    {
3
        public Form1()
4
        {
5
            InitializeComponent();
6
        }
7
8
        private void Form1_Load(object sender, EventArgs e)
9
        {
10
            Form2 form2 = new Form2(ref label1);
11
            form2.Show();
12
        }
13
    }

Form2:
1
    public partial class Form2 : Form
2
    {
3
        Label labelInForm1;
4
5
        public Form2(ref Label labelInForm1)
6
        {
7
            this.labelInForm1 = labelInForm1;
8
            InitializeComponent();
9
        }
10
11
        private void button1_Click(object sender, EventArgs e)
12
        {
13
            labelInForm1.Text = "Hallo!";
14
        }
15
    }

von xab (Gast)


Lesenswert?


von Pala (Gast)


Lesenswert?

warum ist das so scheiße mit den variablenübergaben in Forms gemacht?

mir wäre es lieber, man könnte im Namespace globa´le variablen 
definieren, die in jeder Form gelten und je nach Programmfluss werte 
annehmen. mich fuckt das ab

von Pala (Gast)


Lesenswert?

macht auch einfach brutal keinen bock zu programmieren. für die 
billigsten logiken ist jedes mal immenser aufwand aufzubringen

von Miro V. (miro_v)


Lesenswert?

Pala schrieb:
> warum ist das so scheiße mit den variablenübergaben in Forms gemacht?
>
> mir wäre es lieber, man könnte im Namespace globa´le variablen
> definieren, die in jeder Form gelten und je nach Programmfluss werte
> annehmen. mich fuckt das ab

Hast du denn mal den mehrfach von mir erwähnten delegate versucht?

Zitat: »Delegate« ist das englische Wort für »Delegierter«, also für 
jemanden, der einen Auftrag weiterleiten soll. Tatsächlich leitet ein 
Delegat weiter, er leitet nämlich einen Methodenaufruf an eine bestimmte 
Methode weiter. Die Technik, die sich dahinter verbirgt, wird in der 
Sprache C auch als Funktionszeiger bezeichnet.

Quelle: 
http://openbook.rheinwerk-verlag.de/visual_csharp_2012/1997_05_001.html

Beschäftige dich mal etwas damit. Tipp: Gib in google doch mal "C# 
delegate Form1 Form2" ein. Da findest du haufenweise Leute mit der 
gleichen Frage und mögliche Antworten darauf.

von Schlaumaier (Gast)


Lesenswert?

http://checktechno.blogspot.com/2012/11/global-variables-in-visual-basic-net.html

Einfach in einen externen Modul richtig deklarieren. NICHT in einer 
Form.

von Schlaumaier (Gast)


Lesenswert?

Gilt zwar für VB der Link aber das ist bei C nicht viel anders.

von Pala (Gast)


Lesenswert?

Miro V. schrieb:
> Beschäftige dich mal etwas damit. Tipp: Gib in google doch mal "C#
> delegate Form1 Form2" ein. Da findest du haufenweise Leute mit der
> gleichen Frage und mögliche Antworten darauf.

ja danke dir. Nur: ich muss mich für variablen mit so einer scheiße 
beschäftigen????? das geht mir nicht in den Kopp. da erstelle ich lieber 
auf die schnelle nh Headerdatei mit meiner leiben schönen variable. echt 
lächerlich.

von Schlaumaier (Gast)


Lesenswert?

Hier noch ein Video wie das in C geht. (der Typ ist grausig, aber die 
Erklärung gut).

https://www.youtube.com/watch?v=A4Zv6qDIvi0

In C legt der einfach eine eigenen Class an.

von Miro V. (miro_v)


Lesenswert?

Pala schrieb:
> Miro V. schrieb:
>> Beschäftige dich mal etwas damit. Tipp: Gib in google doch mal "C#
>> delegate Form1 Form2" ein. Da findest du haufenweise Leute mit der
>> gleichen Frage und mögliche Antworten darauf.
>
> ja danke dir. Nur: ich muss mich für variablen mit so einer scheiße
> beschäftigen????? das geht mir nicht in den Kopp. da erstelle ich lieber
> auf die schnelle nh Headerdatei mit meiner leiben schönen variable. echt
> lächerlich.

Das ist ganz und garnicht lächerlich. Dir fehlt wichtiges Grundwissen, 
wenn du dich nicht einmal mit Variablen beschäftigt hast. Nimm es mir 
nicht übel, aber Programmieren - vor allem sicher programmieren - ist 
ein Prozess des lernens. Ohne mich mit Mehl, dem Ofen, den Zutaten zu 
beschäftigen, könnte ich auch nicht backen.

von Pala (Gast)


Lesenswert?

ich danke euch beiden auf jeden Fall =) (das ihr meine schlechte laune 
ausgehalten habt ahha)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.