Autor Beitrag
rap123
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 27.08.13 16:17 
Hallo,

ich bin absoluter C# Neuling und habe GUI's bisher nur mit Java erstellt (und auch das ist schon Jahre her).
Zum Einstieg möchte ich das Beispiel von folgendem Video www.youtube.com/watch?v=trkXsXIh0xo nachprogrammieren.

Da mir zum Entwickeln kein GUI-Builder zur Verfügung steht, (ich entwickle nicht mit Microsoft Visual Studio) habe ich mir ein Beispiel für Windows Forms gesucht.

Das u. S. Beispiel war das einzige, dass (vor meiner Anpassung) funktioniert hat und welches ich auch nachvollziehen konnte.

Das Problem ist, dass die TextBox und das Label nicht im Event Handler (Button_Click) erkannt werden.

Wie kann ich dem Event Handler die Form-Elemente bekanntmachen bzw. was muss ich ändern um das Programm lauffähig zu bekommen?

Vielen Dank für Eure Hilfe
Gruß
Raphael


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
using System;
using System.Drawing;
using System.Windows.Forms;

public partial class HelloWorld : Form
{
    static public void Main ()
    {
        Application.Run (new HelloWorld ());
    }

    public HelloWorld ()
    {
        TextBox t1 = new TextBox();
        t1.Left = 10;
        t1.Top = 10;
        Controls.Add (t1);
        
        Button b1 = new Button ();
        b1.Text = "Click Me!";
        b1.Left=10;
        b1.Top=30;
        b1.Click += new EventHandler (Button_Click);
        Controls.Add (b1);
        
        Label l1 = new Label();
        l1.Left = 10;
        l1.Top = 60;
        l1.Text="HELLO";
        Controls.Add (l1);
    }
    

    private void Button_Click (object sender, EventArgs e)
    {
        l1.Text = t1.Text;
    }
}
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 27.08.13 16:26 
Hallo und :welcome:!

Du hast die Komponenten ja als lokale Variablen im Konstruktor deklariert, deswegen sind die auch nur darin gültig. Du musst sie als Felder der Klasse deklarieren, damit das klappt.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
        TextBox t1;
        Button b1;
        Label l1;

        static public void Main()
        {
            Application.Run(new HelloWorld());
        }

        public HelloWorld()
        {
            t1 = new TextBox();
            t1.Left = 10;
            t1.Top = 10;
            Controls.Add(t1);

            b1 = new Button();
            b1.Text = "Click Me!";
            b1.Left = 10;
            b1.Top = 30;
            b1.Click += new EventHandler(Button_Click);
            Controls.Add(b1);

            l1 = new Label();
            l1.Left = 10;
            l1.Top = 60;
            l1.Text = "HELLO";
            Controls.Add(l1);
        }


        private void Button_Click(object sender, EventArgs e)
        {
            l1.Text = t1.Text;
        }


Aber warum benutzt Du kein Visual Studio? Mach Dir doch nicht mehr Arbeit als notwendig :-)

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
rap123 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 27.08.13 22:34 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:


Du hast die Komponenten ja als lokale Variablen im Konstruktor deklariert, deswegen sind die auch nur darin gültig. Du musst sie als Felder der Klasse deklarieren, damit das klappt.

Ah danke, genau das hatte ich gesucht! Mir war nur nicht klar, wie und wo ich die Variablen global deklariere.

Vielen Dank für Deine Hilfe, wobei das für dich wahrscheinlich nicht schwer zu lösen war :wink:

user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:

Aber warum benutzt Du kein Visual Studio? Mach Dir doch nicht mehr Arbeit als notwendig :-)


Das hat zwei Gründe:
Zum einen sieht es für mich so aus, als ob es für WindowsXP keine kostenlose Visual-Studio-Version gibt, mit der man in C# entwickeln kann (Ich lasse mich sehr gerne eines besseren belehren, jedoch habe ich keinen Download dafür gefunden und keine Ahnung von VisualStudio, sodass es für mich einfacher war, MonoDevelop zu installieren)

Zum Anderen wollte ich unter Linux entwickeln, da es das Betriebssystem ist, welches ich privat hauptsächlich nutze. (Und unter Linux gibt es natürlich kein Visual Studio, sondern eben dieses oben erwähnte MonoDevelop).

Man könnte sich jetzt auch fragen, warum ich dann nicht gleich bei Java bleibe, aber zum einen erscheint mir die Entwicklung mit C# einfacher und zum anderen soll mein Programm später auch im Geschäft laufen ohne dass ich darauf angewiesen bin ob Java installiert ist oder nicht (Das .NET-Framework ist auf unseren Windows-Clients standardmäßig installiert).
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 27.08.13 23:33 
Ich denke schon, dass eine Visual Studio 2008/2010/2012 Express Version auf XP laufen könnte, zumindest fällt mir kein Grund ein, warum nicht.

Probier es doch einfach aus, Visual Studio ist eine ziemliche Erleichterung, weil es in fast allen Bereichen viel vereinfacht und Arbeit abnimmt.
Wenn du sagst, du willst kein Visual Studio, dann kann ich noch SharpDevelop empfehlen. Das kommt meiner Meinung nach am weitesten in die Nähe von Visual Studio.


Eine solche Entwicklungsoberfläche ist gerade bei Windows Forms sehr praktisch, weil das doch recht umständlich zu schreiben ist und so ein Designer den größten Teil der Schreibarbeit abnimmt.




Was den Code angeht, so würde ich alles, was du im Moment im Konstruktor hast, in eine extra Methode auslagern und die privaten Variablen auch. So macht das auch der Designer von VS, der lagert diese Dinge in eine partielle Klasse (Deine aktuelle Klasse ist sowieso schon partiell) aus, damit diese ewig Langen Zeilen unübersichtlichen Codes nicht neben der Logik stören.


Partielle Klassen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
partial class Klasse
{
    public void Methode()
    {
    }
}

partial class Klasse
{
    public Klasse()
    {
    }
}


static class Program
{
    static void Main(string[] args)
    {
        KLasse klasse = new Klasse();
        klasse.Methode();
    }
}


Beide müssen das Schlüsselwort partial haben und den gleichen Namen tragen, dann sind in Beiden auch alle Inhalte gleichermaßen verfügbar und sie werden als eine Klasse kompiliert.
Webo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Mi 28.08.13 08:44 
Das Visual Studio 2012 ist nicht für XP erhältlich, siehe www.microsoft.com/vi...oducts/compatibility. Liegt soweit ich mich erinnere daran, dass .Net4.5 einfach nicht für XP existiert ...

Die 2010er Version hingegen schon: www.microsoft.com/vi...loads#d-2010-express

_________________
Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
rap123 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 28.08.13 13:34 
Vielen Dank für die wertvollen Tipps. :D

Da habe ich ja endlich ein gutes Forum gefunden (nachdem ich in zwei anderen Foren keine Antwort auf meine Frage erhalten hatte).