Autor Beitrag
darkangel1208
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Mi 14.10.09 11:57 
Ich bin vollkommen verwirrt.

Metohden, Klassen und die Hauptklaase ist mir klar. Aber wenn ich eine neue Form-Anwedung erstelle, habe ich ja erstmal dort eine Form1.cs(abgeleitet aus der Klasse Form), die eine Form1.Designer.cs enthält. ja ok
Dann gibt es noch eine Programm.cs, mit der ich die Form1.cs aufrufen kann (und auch mehrere Forms wenn ich will)
(wenn ich die Program.cs von Form ableite, also public class Program : Form, dann taucht aber nicht automatisch eine Program.Designer.cs auf)

Was ich nun nicht verstehe ist, wo kommt nun mein Programmcode hin, wo meine Methoden, Klassen ect. wo kommt der code hin, dass wenn eine Button gedrückt wird, eine bestimmt Methode dann aufgerufen wird und das was dort im Return steht, dann an eine Textbox geht. Also irgendwie steh ich auf dem Schlauch und im Netz habe ich leider auch nix gefuden. Nur Problemlösungen, die sich dann auf Probleme beziehen, die die Leute später in ihren Anwendungen bekommen
katmai
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

Win xp

BeitragVerfasst: Mi 14.10.09 12:27 
em ich weiß nicht ob ich dich richtig verstanden habe, aber der eigentliche
Quelltext kommt in deine Form1.cs.

[cs]
darkangel1208 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Mi 14.10.09 12:40 
aha und was kommt dann in die Program.cs??

Also heißt das, das ich die statischen Einstellungen, die von vornherein vorhanden sind, wenn man das Programm startet in die Form1.cs kommen

Dann sind da ja noch so sachen wie, dass man die Hintergrundfarbe(oder anderes) vielleicht wechseln kann wärend das Programm läuft. Also ohne es zu beenden oder neu zu starten. kommt das in die Program.cs oder auch dort wo mein eigentlicher Quellcode steht(Form1.cs)
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 14.10.09 12:41 
Hallo und :welcome:

Du solltest vorzugsweise nicht die Dateien, sondern die Klassen und Objekte betrachten.

Basis ist die Applikation (Anwendung). Diese enthält als "Hauptprogramm" die Klasse Program. Diese ist definiert in der Quelldatei Program.cs und enthält vor allem die Main-Methode. Die Methode Application.Run wird durch Main aufgerufen und sorgt dafür, dass eine Instanz der Klasse MainForm erzeugt und als Objekt aktiviert wird.

Die Klasse MainForm wiederum ist partial definiert und in zwei Quelldateien festgelegt: in MainForm.cs und MainForm.Designer.cs. Wie der Name sagt, ist die letzte Datei das, was der Designer automatisch erstellt hat; dort hast du als Anwender nichts verloren. (Wenn du weiter bist und genau weißt, was du machst, kannst du auch darin Änderungen vornehmen, aber in den nächsten Wochen keinesfalls.)

Damit ist klar: Alles, was du selbst programmierst, gehört in jede andere Datei, aber nicht in eine Designer-Datei. In welche Datei es gehört, hängt vom Zusammenhang ab. Sachen, die die zentrale GUI betreffen, gehören in die MainForm.cs. Sachen, die das Programm steuern (z.B. Login-Abfrage), gehören in die Program.cs.

Ich hoffe, dass es damit etwas klarer wurde. Gruß Jürgen

PS. Wie du an meinem Beitrag siehst, solltest du unbedingt aussagefähige Namen verwenden. Etwas wie Form1 gehört verboten!

PS2. Während ich meinen Beitrag abgeschickt hatte, kam deine Antwort. Mein Beitrag sollte es weitgehend beantworten. Auch Änderungen, die an der GUI zur Laufzeit vorgenommen werden, werden durch die betreffende Klasse gesteuert.
darkangel1208 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Mi 14.10.09 13:21 
ah ok nur damit ich es richtig verstanden habe

ich habe die Program.cs, mit der Ich mein Hauptfenster aufrufe und erzeuge

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program 
    {
        static void Main()
        {
            Application.Run(new MainForm());
        }
    }
}


und dann habe ich noch die Datei, wo der Code zu dem Hauptfenster steht z.B. MainForm.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
    }
}


In die MainForm.cs kommt nun auch der Code, wenn ich einen Button erzeugen will und wie dieser aussieht (länge.breite etc.)
Was der Button allerdings machen soll, wenn ich ihn drücke (methode aufrufen etc.) steht wieder in der Program.cs richtig?

z.B. ich habe einen Button auf dem Würfeln steht, wenn man ihn drückt sollen 5 Würfel "gewürfelt" werden und die gewürfelten Zahlen (random()) in ein Array schreiben. Das optische an dem Button steht in MainForm.cs und der Programm dazu, das random,in array schreiben, oder weiterer Methoidenaufruf.... steht in der Program.cs

Moderiert von user profile iconKha: C#-Tags hinzugefügt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 14.10.09 14:01 
user profile icondarkangel1208 hat folgendes geschrieben Zum zitierten Posting springen:
In die MainForm.cs kommt nun auch der Code, wenn ich einen Button erzeugen will und wie dieser aussieht (länge.breite etc.)

Wenn du den Button manuell per Code erzeugen würdest, wäre das richtig. Das lässt du aber vermutlich den Designer machen - genauer: du öffnest den Designer, ziehst einen Button aus der ToolBar auf das Formular und stellst die Eigenschaften im Eigenschaften-Editor (PropertyGrid) ein. Der Designer schreibt das Ergebnis deines Klicki in die MainForm.Designer.cs.

user profile icondarkangel1208 hat folgendes geschrieben Zum zitierten Posting springen:
Was der Button allerdings machen soll, wenn ich ihn drücke (methode aufrufen etc.) steht wieder in der Program.cs richtig?

Ganz falsch. Der Button gehört zur MainForm-Klasse; also gehört also dazu in eine der MainForm-Dateien (beachte die Mehrzahl).

Konkret öffnest du das Formular wieder im Designer. Mit einem Doppel-Click auf den Button erzeugst du (genauer: lässt den Designer erzeugen) den Rumpf für den Click-Code. Hast du schon einmal ausprobiert, wo der landet? Eben, in der MainForm.cs, weil es Bestandteil dieses Buttons in diesem Formular ist und von dir (nicht vom Designer) mit Inhalt gefüllt werden soll.

user profile icondarkangel1208 hat folgendes geschrieben Zum zitierten Posting springen:
z.B. ich habe einen Button auf dem Würfeln steht, wenn man ihn drückt sollen 5 Würfel "gewürfelt" werden und die gewürfelten Zahlen (random()) in ein Array schreiben. Das optische an dem Button steht in MainForm.cs und der Programm dazu, das random,in array schreiben, oder weiterer Methoidenaufruf.... steht in der Program.cs

Genauso falsch. Auch das Würfeln ist Aufgabe des Buttons im Formular. Also gehört es in den Code des Formulars.

JüTho hat folgendes geschrieben:
Sachen, die das Programm steuern (z.B. Login-Abfrage), gehören in die Program.cs.

Ich muss es noch deutlicher formulieren: Ausschließlich Sachen, die dafür sorgen, dass das Programm überhaupt in die Gänge kommt, gehören in die Program.cs. Alles andere kommt in den Teil, der gerade aktiv ist.

Außerdem möchte ich dich noch auf folgende Punkte hinweisen:
* Ein Array hat eine feste Größe. Wenn du einmal 5 Würfe haben willst und an einer anderen Stelle 8, dann nimm besser eine List<int>, die kann beliebig vergrößert werden.
* Beachte, dass new Random nur einmal aufzurufen ist; am besten passt es in das Form.Load-Ereignis.
* Code ist als solcher zu markieren: öffne deinen letzten Beitrag mit dem Schere-Button nochmals, markiere den ersten Teilbereich, drücke auf "Bereiche", wähle in der ComboBox "C#", drücke den Plus-Button, markiere den zweiten Teilbereich usw., dann "Absenden". So wird es richtig lesbar.

Du solltest dich wohl grundsätzlich mit einer "Einführung in das Programmieren" beschäftigen. Vor allem die Zusammenarbeit von Klassen und deren Instanzen (Objekten) muss dir schleunigst klar werden. Eine Möglichkeit dafür ist das OpenBook Visual C#.

Gruß Jürgen
darkangel1208 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Mi 14.10.09 21:53 
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:

Du solltest dich wohl grundsätzlich mit einer "Einführung in das Programmieren" beschäftigen. Vor allem die Zusammenarbeit von Klassen und deren Instanzen (Objekten) muss dir schleunigst klar werden.

Gruß Jürgen



Hmm ich denke eingentlich das mir dieser Punkt schon klar war, nur nicht der wohin ich den Code schreibe denn Klassen und Methoden wären ja z.B.

Klasse Rechteck
Methode Fläche
Methode Umfang

Klasse Dreieck
Methode Fläche
Methode Umfang

Klasse Kreis
Methode Fläche
Methode Umfang


Diese 3 Klassen köntne ich nun auch wieder von der Klasse Geometrische_Form ableiten. Sprich das die Klassen Kreis, Dreieck und Rechteck von Geometrische_Form erben.


Aber ich werde es mir natürlich nochmal durchlesen, denn dort sind ja auch noch andere interressante Sachen
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 15.10.09 09:13 
Aber die Klasse Program darf nichts erledigen, was zur Klasse MainForm gehört. Das meinte ich mit meinem allgemeinen Hinweis auf OOP. Jürgen
Nemag
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 2



BeitragVerfasst: Do 15.10.09 10:39 
user profile icondarkangel1208 hat folgendes geschrieben Zum zitierten Posting springen:

Klasse Rechteck
Methode Fläche
Methode Umfang

Klasse Dreieck
Methode Fläche
Methode Umfang

Klasse Kreis
Methode Fläche
Methode Umfang



Will ja nichts sagen, aber von der Nomenklatur her würde ich sagen das deine Methoden alles Eigenschaften der Klassen sind.

Fläche eines Rechtecks ist eine Eigenschaft und keine Methode. Ein Methode wäre sowas wie BerechneFläche oder ZeichneRechteck. Na ja alles sehr abstrakt ;-)
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 15.10.09 11:49 
user profile iconNemag hat folgendes geschrieben Zum zitierten Posting springen:
Fläche eines Rechtecks ist eine Eigenschaft und keine Methode. Ein Methode wäre sowas wie BerechneFläche oder ZeichneRechteck.

Naja, die Fläche ist m.E. ein Grenzfall, da sie sowieso aus Länge und Breite errechnet wird.

user profile iconNemag hat folgendes geschrieben Zum zitierten Posting springen:
Na ja alles sehr abstrakt ;-)

Sehe ich auch so, deshalb müssen wir das wohl nicht vertiefen. Sonst landen wir bei virtual u.a., und das geht über die Grundlagenprobleme des TE hinaus. Jürgen