Entwickler-Ecke
WinForms - Einfache GUI - Auslesen von TextBox bei Klick auf Button
rap123 - Di 27.08.13 16:17
Titel: Einfache GUI - Auslesen von TextBox bei Klick auf Button
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
http://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
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. - 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.
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
rap123 - Di 27.08.13 22:34
Christian S. hat folgendes geschrieben : |
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:
Christian S. hat folgendes geschrieben : |
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 - 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:
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.
rap123 - 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).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!