|
|
|
|
C#: der BB-BilligRecher |
Cpt.Miller
BlackBoarder
Dabei seit: 14.08.2003
Beiträge: 644
Herkunft: Stuttgart
|
|
C#: der BB-BilligRecher |
|
Willkommen zu meinem ersten Tutorial, konstruktive Kritik ist gewünscht
Was bauen wir?
In diesem Tutorial wollen wir einen kleinen Taschenrechner mit GUI programmieren.
Der Taschenrechner wird in meiner Implementation nur addieren können, doch den Rest könnt ihr sicherlich ganz einfach selbst erweitern.
Also, was benötigen wir?
Das Microsoft .NET Framework
Eine Intigrierte Entwicklungsumgebung (IDE),
meine Empfehlung: SharpDevelop
Was sind diese komischen Programme?
Das .NET Framework ist ein neues Programmiermodell von Microsoft, dies benötigen wir damit wir .NET Anwendungen programmieren können. Wenn ihr mehr zu .NET wissen wollt solltet ihr google benutzen
(gibt genug Informationen)
SharpDevelop ist eine IDE. Es ist für einen Programmierer um einiges Angenehmer in einer IDE zu programmieren als mit einem einfachen Texteditor.
Warum ist es viel gemütlicher? Ganz einfach: ihr habt alle Tools in einer Oberfläche vereint und könnt diese sehr einfach aufrufen (Debugger, kompilieren, ...)
1. SharpDevelop, wir erstellen ein neues 'Combine' (Projekt)
Nach der Installation von SharpDevelop, sollte es beim Starten des Programms so ungefähr aussehen:
Also, wir wollen unser erstes Combine (entspricht einem "Projekt"
erstellen.
Datei --> Neu --> Combine
Ein neues Dialogfeld sollte erscheinen, was so aussehen sollte:
Programmiersprache: C#
Schablone: Windows-Anwendung
Name: BB-BilligRecher
Verzeichnis: X:\Hier\steht\der\Pfad\wo\das\Projekt\gespeichert\wird
Nun klicken wir auf Erstellen
[SharpDevelop generiert uns nun eine Programmdatei, die ein ganz billiges Form und eine vorlage für unser Programm ist]
2. Programmoberfläche (GUI) designen
Wir haben in SharpDevelop einen intigrierten Designer, wir wechseln auf ihn in dem wir (unterhalb des Programmcodes) auf Design klicken.
Dann sehen wir die Oberfläche des Programms, es ist noch leer.
Um es zu füllen, benutzen wir Windows.Forms (Eine Klasse des .NET Frameworks um einfach und effizient unter .NET Oberflächen zu erstellen)
Um Windows.Forms auszuwählen, klickt ihr auf Tools und dann auf Windows Forms.
Ihr designt euer Programm so, bis es ungefähr so aussieht:
Nun bearbeiten wir dir erstellen Objekte
textBox1 und textBox2 sind Textbox'en
Eigenschaften:
Text: ' ' [Leer, weil dies Eingabeboxen sind, also muss da nichts rein !]
label1 ist ein Label und dient der Ausgabe
Eigenschaften:
Text: ' ' [Leer, weil dies Eingabeboxen sind, also muss da nichts rein !]
button1 ist ein Button und startet die Rechnung
Eigenschaften:
Text: 'Ausführen' [Text des Buttons]
name: btnStart [der Name, der im Programmcode verwendet wird]
sodass es so ungefähr aussehen sollte:
3. Programmcode
Wir wollen nun das Programm coden, das ist allerdings nicht sonderlich schwer.
Mit einem Doppelklick im Designer auf "Ausführen" (bzw. btnStart) erstellt uns SharpDevelop einen Eventhandler mit dem Event clicked() , dieses Event wird ausgelöst, wenn der Benutzer auf btnStart klickt.
die Funktion sollte so aussehen
code: |
1:
2:
3:
|
void BtnStartClick(object sender, System.EventArgs e)
{
} |
|
Wir müssen jetzt erstmal, die Textboxen auslesen und in Variablen speichern.
Das 'Problem' dabei ist, das man mit String Werten (Zeichenketten, z.B. 'Ich bin cool') nicht rechnen kann, das heißt wir müssen sie umrechnen in Integer oder Decimal [Integer kann natürliche Zahlen aufnehmen, allerdings keine Kommazahlen; Decimal ist da besser geeigenet)
Wir nehmen mal der Einfachheit halber Decimal
Erstmal erstellen wir 2 decimal variablen (zahl1 und zahl2).
code: |
1:
|
decimal zahl1,zahl2; |
|
Dann lesen wir den Inhalt der Textboxen ein und konvertieren.
code: |
1:
|
zahl1=Convert.ToDecimal(textBox1.Text); |
|
Erklärung (obwohls billig ist
):
Convert ist eine Klasse, die zu Konvertierung zwischen verschiedenen Datentypen dient (wer hätte das gedacht?)
Mitglieder der Klasse sind z.B.:
code: |
1:
2:
|
ToInt32(object value); [Objekt value in Integer32 konvertieren]
ToString(object value); [Objekt value in String konvertieren] |
|
mehr bei MSDN.
also vollständig sieht die Funktion fürs erste so aus:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
void BtnStartClick(object sender, System.EventArgs e)
{
decimal zahl1,zahl2;
zahl1=Convert.ToDecimal(textBox1.Text);
zahl2=Convert.ToDecimal(textBox2.Text);
}
|
|
Achja und als Objekt übergeben wir der ToDecimal() Funktion, den Inhalt der jeweiligen textBox (z.B. textBox1.Text);
Gut, wenn wir den Button nun anklicken würden, würde das Programm nur die Werte in Decimal umrechnen und speichern, mehr nicht.
Das ändern wir mit:
code: |
1:
|
label1.Text=Convert.ToString(zahl1+zahl2); |
|
Erklärung:
der Text von label1 wird mit der Summe aus zahl1 und zahl2 gefüllt.
Die Verwendung von Convert.ToString() ist notwendig, da label1 nur Strings anzeigen kann.
Insgesamt sollte es nun so aussehen:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
void BtnStartClick(object sender, System.EventArgs e)
{
decimal zahl1,zahl2;
zahl1=Convert.ToDecimal(textBox1.Text);
zahl2=Convert.ToDecimal(textBox2.Text);
label1.Text=Convert.ToString(zahl1+zahl2);
}
|
|
Mit einem Druck auf F5 wird das Programm kompiliert und sollte ohne Fehler starten.
Hier nochmal der komplette Quellcode:
code: |
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:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
|
using System;
using System.Drawing;
using System.Windows.Forms;
namespace BB_Tut
{
/// <summary>
/// Description of MainForm.
/// </summary>
public class MainForm : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Button btnStart;
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
[STAThread]
public static void Main(string[] args)
{
Application.Run(new MainForm());
}
#region Windows Forms Designer generated code
/// <summary>
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
/// </summary>
private void InitializeComponent() {
this.btnStart = new System.Windows.Forms.Button();
this.textBox2 = new System.Windows.Forms.TextBox();
this.textBox1 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// btnStart
//
this.btnStart.Location = new System.Drawing.Point(80, 176);
this.btnStart.Name = "btnStart";
this.btnStart.Size = new System.Drawing.Size(136, 72);
this.btnStart.TabIndex = 2;
this.btnStart.Text = "Ausführen";
this.btnStart.Click += new System.EventHandler(this.BtnStartClick);
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(168, 40);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(96, 20);
this.textBox2.TabIndex = 1;
this.textBox2.Text = "";
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(24, 40);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(88, 20);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "";
//
// label1
//
this.label1.Location = new System.Drawing.Point(48, 88);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(192, 64);
this.label1.TabIndex = 3;
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.label1);
this.Controls.Add(this.btnStart);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Name = "MainForm";
this.Text = "MainForm";
this.ResumeLayout(false);
}
#endregion
void BtnStartClick(object sender, System.EventArgs e)
{
decimal zahl1,zahl2;
zahl1=Convert.ToDecimal(textBox1.Text);
zahl2=Convert.ToDecimal(textBox2.Text);
label1.Text=Convert.ToString(zahl1+zahl2);
}
}
}
|
|
Anhang:
#region Windows Forms Designer generated code
In der IDE steht links neben dieser Zeile ein "-", womit man die 'Region' "Windows Designer generated Code" ausblenden kann, da dieser Code von dem Designer erstellt wird. [da sieht man mal, was der Designer alles an Arbeit abnimmt nicht wahr?]
Links:
Microsoft .NET 1.1 SDK Version (~120 MB)
[Ich empfehle die SDK Version, da die eine gute Dokumentation enthält, man kann allerdings auch DAS hier nehmen, 23 MB ]
SharpDevelop
Naja Kritik ist gewünscht, ich weiß ist alles etwas schlecht erklärt, fragen kläre ich jedoch gerne
cya euer Captain C# [CptMiller
]
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Cpt.Miller: 08.02.2005 21:07.
|
|
02.02.2005 19:19 |
|
|
COCYHOK
Verunsicherungsmakler
Dabei seit: 04.10.2003
Beiträge: 1.079
Herkunft: CCCP
|
|
Konstruktive Kritik. Also:
Am Anfang solltest du erstmal eine kurze Einleitung schreiben, worum es überhaupt geht. Was erzählst du hier eigentlich? Wofür und für wen soll das Tutorial gut sein? Was sind das für komische Programme, die man da braucht? Du fällst gleich mit der Tür ins Haus, ohne, dass ich weiß, was mich erwartet, was ich für Vorkenntnisse brauche und vor allem, für welche Plattform das Ganze ausgelegt ist.
Ich habs mir nicht durchgelesen, weils mich nicht interessiert. Schön ist, dass du Bilder verwendet hast. Aber am Ende machst du deine eigene Arbeit schlecht:
Zitat: |
…ich weiß ist alles etwas schlecht erklärt… |
Das kriegen die Leute dann schon selber mit, wenns wirklich so ist. Das musst du denen nicht auf die Nase binden.
Inhaltlich kann ich nichts dazu sagen. Das sind nur meine ersten negativen Kritikpunkte, die mir eingefallen sind. Wenn du da mal drüber nachdenkst, findet sich vielleicht auch einer, der aus dem Tutorial Wissen gewinnen kann.
__________________ Es ist eine Frage, ob wir nicht, wenn wir einen Mörder rädern, grade in den Fehler des Kindes verfallen, das den Stuhl schlägt, an dem es sich stößt.
Georg Christoph Lichtenberg, 18. Jahrhundert
|
|
05.02.2005 00:42 |
|
|
Cpt.Miller
BlackBoarder
Dabei seit: 14.08.2003
Beiträge: 644
Herkunft: Stuttgart
Themenstarter
|
|
ja ich habs einfach runtergearbeitet... okay ich werds die tage verbessern. Danke
|
|
05.02.2005 02:04 |
|
|
wheedcreed
fuCKYou
Dabei seit: 14.07.2003
Beiträge: 255
Herkunft: Da wo ich wohn
|
|
Habs mir zwar auch nicht ganz durchgelesen, weils mich nicht sonderlich interessiert, aber ich find den Anfang hast du ziemlich gut und ausführlich beschrieben.
Wie gesagt, zum Rest kann ich nix sagen, weil ichs nicht gelesen hab.
Aber wenn du weiter so erklärst, finden sich bestimmt leute die es lesen, und dadurch lernen werden.
Weiter so
__________________ ~Memento Mori~
|
|
04.03.2005 00:52 |
|
|
Flamesword
BlackBoarder
Dabei seit: 26.03.2004
Beiträge: 731
Herkunft: bei FFM
|
|
Ich wollte nur anmerken, dass die Bilder nicht mehr funktionieren. Könntest du ja mal bei Zeiten reparieren.
__________________ Fick nicht die Welt, sondern schwänger sie!
Verteil positive und nicht negative Energie!
Teile mit den Leuten, schenk ihnen Liebe und veränder sie....
|
|
26.12.2006 16:08 |
|
|
Cpt.Miller
BlackBoarder
Dabei seit: 14.08.2003
Beiträge: 644
Herkunft: Stuttgart
Themenstarter
|
|
Hui!
Sorry das ist ja schon sooo alt
. Ich hab die Bilder leider nicht mehr. Wenn ich mir das heute nochmal so durchlese, finde ich es ziemlich lustig, wie ich das ganze hier beschrieben habe
.
Naja, wie gesagt, leider habe ich die Bilder nicht mehr, aber wenn ein "großes" Interesse an solchen Tutorials vorhanden ist, dann kann gerne wieder welche erstellen.
|
|
26.12.2006 19:04 |
|
|
Misel
Hüter des Kitkat
Dabei seit: 02.11.2002
Beiträge: 1.203
Herkunft: live://home.berlin.d
e
|
|
|
27.12.2006 23:14 |
|
|
|
|
|
|