Einige Fragen zu C#

Für alles, was nicht mit fischertechnik zu tun hat.
Miscellaneous - everything that has nothing to do with ft
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
Majus
Beiträge: 129
Registriert: 30 Nov 2010, 15:35
Wohnort: Deutschland

Einige Fragen zu C#

Beitrag von Majus » 22 Jul 2012, 22:03

Hallo,

nachdem ich gerade dabei bin mit C# zu programmieren musste ich feststellen, dass es doch sehr grundlegende Änderungen zu C gibt. Deshalb die folgenden Fragen:

Frage 1:
Wie kann ich die Tastatur in meinen Programmablauf miteinbinden, also wenn z.B. die Pfeiltaste nach rechts gedrückt wird soll ein Panel um 5 nach rechts bewegt werden? (Irgendwie geht es über Eigenschaften KeyPress zwar, aber extrem langsam)

Frage 2:
Im Moment bin ich gerade an einer Programmierung einer Landkarte (wie bei Pokemon). Es handelt sich um ein Panel, das mit Buttons nach links, rechts, oben und unten bewegt wird. Im Mittelpunkt ist ein festsitzendes Panel mit der Figur, so scheint es als würde diese laufen. Nun möchte ich aber verhindern, dass die Figur überall hinläuft - sich das Panel also überall hinbewegen kann. Wie könnte ich das machen? Ich hatte die Idee, dass ich sich mitbewegende Panels auf alle Flächen mache, wo die Figur nicht hindarf. Kann ich dann eine if-Schleife irgendwie so erstellen:

public int stop;
if( Panel1.Location == Figur.Location)
{
stop = 1;
}

wenn Knopf links,rechts, oben oder unten gedrückt wird:

if( stop == 0)
{
panel wird bewegt
}
else
{
Panel wird nicht bewegt
}

Frage 3:
Mein nerviges dauerhaftes Problem ist die Übertragung von Variablen über mehrere Formen. So will ich von Form 2 aus auf die Variable in Form 1 zugreifen. Kann hier jemand einen einfachen Quellcode liefern?

Ich glaube das wars dann schon, ich hoffe auf Antworten, die ich verstehe, da ich noch der totale Anfänger bin...

Gruß
Majus

Benutzeravatar
steffalk
ft:pedia-Herausgeber
Beiträge: 1794
Registriert: 01 Nov 2010, 16:41
Wohnort: Karlsruhe
Kontaktdaten:

Re: Einige Fragen zu C#

Beitrag von steffalk » 23 Jul 2012, 00:21

Tach auch!

Zu Frage 1: Da wäre zunächst zu klären, ob Du WinForms oder WPF als GUI verwendest. Das Prinzip ist aber immer so, dass Du einen Event bekommst, wenn eine Taste niedergedrückt, ein Zeichen getippt, oder die Taste losgelassen wird (in dieser Reihenfolge). Du könntest also auf das Tastaturereignis "Taste gedrückt" prüfen, ob es eine Pfeiltaste war, und wenn ja, Dein Panel verschieben.

Zu Frage 2: Verstehe ich richtig: Das Figurenpanel bleibt fest, und das Hintergrundpanel bewegt sich darunter? Dann hat das Hintergrundpanel ja vermutlich irgendeine Eigenschaft (z.B. seine Location, bzw. Left und Top). Und an der Stelle im Code, an der das Panel bewegt wird, prüfst Du halt, ob und ggf. wie weit Du das noch mitmachen willst. Ein if ist da wohl das Richtige.

Zu Frage 3: Eine ganz billige Variante wäre, eine statische öffentliche Variable (Feld) oder Eigenschaft in eine der Form-Klassen aufzunehmen - sofern es immer nur eine Instanz dieser Forms gibt. Vermutlich wäre es aber eleganter, wenn beide Forms einen Verweis auf ein und dasselbe Status-Objekt bekommen, und das hält dann die benötigten gemeinsam verwendeten Eigenschaften.

Fragen 1 und 2 haben übrigens kaum etwas mit C# an sich zu tun. Das wäre in jeder .net-Sprache genau dasselbe Vorgehen. Frage 3 wiederum dürfte in allen objektorientierten System (z.B. auch in Java oder C++) ähnlich gelöst werden.

Wenn es nicht verständlich genug war, frag einfach nochmal genauer.

Gruß,
Stefan

Majus
Beiträge: 129
Registriert: 30 Nov 2010, 15:35
Wohnort: Deutschland

Re: Einige Fragen zu C#

Beitrag von Majus » 23 Jul 2012, 21:20

Hallo,

Danke erstmal für die Antwort. Als Anfänger gibt es nur die Visual Studio Website, welche für mich zu kompliziert ist - zumal die Übersetzung mäßig ist...
Kann es sein, dass Visual Studio 2010 WindowsFormsApplications nicht in C# programmiert werden - das Internet behauptet mal dies mal das.

Frage 1:
Ich verwende WindowsForms. Wenn ich unter dem Eigenschaftsfenster bei KeyPress die Taste w eingebe erscheint dasselbe wie bei einem Button-Klick. Das Problem ist, dass nichts passiert, wenn ich auf das w tippe. (Oder eher: es dauert lang !?) Hier wäre mal ein Originalausschnitt hilfreich, wie ich so etwas zu programmieren habe.

Frage 2:
Kann mir da jemand meinen obrigen Quellcode verändern? So wie es Steffalk erklärt hat stimmt es...

Frage 3:
Auch hier wäre ein Code nützlich... - Sonst komme ich nicht weiter, denn über Google werde ich nicht gerade schlau...


Gruß Majus

@Steffalk: Vielleicht gibt es noch die Erinnerungen an mich, weshalb ich an C#/Visual Studio dransitze... Ich wollte eine Präsentation über den Ultraschall Sensor steuern, was mit C "poplig" ist. (Sehe ich ein). Daher begann ich mit C# - das nur als Erklärung für mein fehlendes Wissen...

sven
Beiträge: 2750
Registriert: 18 Okt 2010, 18:13
Wohnort: Rahden
Kontaktdaten:

Re: Einige Fragen zu C#

Beitrag von sven » 23 Jul 2012, 21:26

Hallo!

@majus:
Es gibt auch eine deutsche Visual Studio Webseite: http://www.microsoft.com/germany/visualstudio/

Gruß
Sven
Dieses Posting gibt ganz allein meine persönliche Meinung wieder!

Majus
Beiträge: 129
Registriert: 30 Nov 2010, 15:35
Wohnort: Deutschland

Re: Einige Fragen zu C#

Beitrag von Majus » 23 Jul 2012, 21:48

Hallo,

das stimmt, aber für hilfreiche Ratschläge ist die Seite eher weniger geeignet. Vielmehr dient sie einem Kauf einer solchen Software.
Die "wahren" Ratschläge bekommt man auf dem MSDN Hilfecenter http://msdn.microsoft.com/de-de/bb188199.aspx
Hier ist die Definition von Visual Studio zu einem Panel http://msdn.microsoft.com/de-de/library ... panel.aspx
Zum Glück ist das so wenig Inhalt und der Quelltext unten auf Englisch... Ich finde es halt komisch, mal ist es Englisch und mal Deutsch.

Vielleicht könntet ihr mir zuerst einmal mit der Programmiersprache auf die Sprünge helfen, ich glaube, dass es sich um C# handelt, bin mir aber nicht sicher...

Gruß
Majus

Benutzeravatar
steffalk
ft:pedia-Herausgeber
Beiträge: 1794
Registriert: 01 Nov 2010, 16:41
Wohnort: Karlsruhe
Kontaktdaten:

Re: Einige Fragen zu C#

Beitrag von steffalk » 24 Jul 2012, 09:40

Tach auch!

WinForms ist einfach ein Teil der .net Framework Klassenbibliothek und kann von jeder beliebigen .net-Sprache incl. C# verwendet werden. Einer der Gags an .net ist ja gerade, dass es völlig wurscht ist, welche Sprache Du verwendest (sofern ein .net-Compiler dafür existiert). WinForms besteht einfach aus ganz normalen .net-Klassen, die verwendet werden wie jede andere Klasse auch.

Wegen des Quellcodes schlage ich den umgekehrten Weg vor: Stell doch mal Deinen Code zur Verfügung (auf pastebin z.B., oder zippe und maile mir Dein C#-Projekt), dann gucke ich mal drüber. Schreib vielleicht Kommentare hin, damit ich die Problemstellen leichter finde.

Gruß,
Stefan

vleeuwen
Beiträge: 1560
Registriert: 31 Okt 2010, 22:23
Wohnort: Enschede (NL)
Kontaktdaten:

Re: Einige Fragen zu C#

Beitrag von vleeuwen » 24 Jul 2012, 20:06

C# and C is not real comparable.

The starting point for C# is object oriented programming with garbage collector and managed code.
C doesn’t know an object oriented back ground.
Only the imperative part knows some similarities.
C# and JAVA are comparable but not on the lower level part.
C# is much younger than JAVA, the developers make use of the experiences with JAVA to make C# more mature. C# does not carry the history of JAVA.

The nice thing is the integration of lambda expressions and LINQ into the C#.
When you decide to start with C#, the best thing you could do is forget (get ride ) of your C background and make the switch in your mind into the object oriented world.
-) What is an object?
-) How do object communicated?

Also don’t be stuck with the old and almost obsolete WinForms and Win-API , WPF has the future.

Majus
Beiträge: 129
Registriert: 30 Nov 2010, 15:35
Wohnort: Deutschland

Re: Einige Fragen zu C#

Beitrag von Majus » 24 Jul 2012, 22:14

Hallo,
@Steffalk: Das werde ich bei der nächsten Gelegenheit mal tun...
Vielleicht gibt es noch einiges zu verbessern - oder eher sicher, denn meine Code gleicht einem Durcheinander, da ich die meisten C# Befehle nicht kenne, die mir die "Arbeit" erleichtern würden.

@Vleeuwen: Thanks a lot, I had to learn this too. C# is another type of code... So I had to learn this new programming language, but it wasn´t easy.
The problem is that there aren´t a lot of tutorials or any help in the internet for starters.

Gruß
Majus

fitec
Beiträge: 16
Registriert: 01 Nov 2010, 10:28
Kontaktdaten:

Re: Einige Fragen zu C#

Beitrag von fitec » 28 Jul 2012, 08:40

Hi,
ohne direkt auf deine Beispiele eingehen zu können: Wenn du Probleme mit Englisch hast, ist es am effizientesten, wenn du dir deutschsprachige Literatur besorgst. Der Verlag "GalileoComputing" hat recht gute (deutschsprachige) Bücher zu allem möglichen im IT Bereich. Man muss halt mal um die 40€ hinblättern, aber gerade wenn du noch Anfänger bist, lohnt es sich! So habe ich vor Jahren C gelernt. Umfangreiche Tutorials und API Dokumentationen im Original auf Englisch zu lesen (und zu verstehen!) schaffe ich auch noch nicht so lange. Mittlerweile klappt es gut, das kommt mit der Zeit.

VG, Nils

vleeuwen
Beiträge: 1560
Registriert: 31 Okt 2010, 22:23
Wohnort: Enschede (NL)
Kontaktdaten:

Re: Einige Fragen zu C#

Beitrag von vleeuwen » 21 Aug 2012, 18:48

@Majus,
There is a lot of tuturials about C# on the internet and in the bookshops, even the German language.

The basic C# is not so big, it is a object onriented programming language with garbage collector.
The OOP pricipal part is not realy language bounded. The same theory is usable for example for JAVA and a OOP part of C++ .
The main issue is the knowlegde of the libraries and how to deal with tne existing class.
An Bertram Meijer already wrote, OOP is the reusability of exiting classes and not to write all your code yourself from scratch.

Because the most of the documentation is in English, I like to suggest to you to start with the English tutorials

Arthur83
Beiträge: 17
Registriert: 28 Jul 2012, 17:27

Re: Einige Fragen zu C#

Beitrag von Arthur83 » 28 Aug 2012, 15:54

Auf was für einen System programmierst du eigentlich?
Hatte auch Überlegt mal damit anzufangen, mache bisher nur Webdesign bzw. interpretiere Seiten über Php Html..^^

Majus
Beiträge: 129
Registriert: 30 Nov 2010, 15:35
Wohnort: Deutschland

Re: Einige Fragen zu C#

Beitrag von Majus » 11 Sep 2012, 21:04

Hallo,

Erstmal vielen Dank für alle Antworten.

Ich programmiere mit WindowsForms.
Der Code für die Variablen:

public int wert; // öffentliche Variable, die übergeben werden soll

Nach dem Drücken eines Knopfes in der zweiten Form soll die Variable benutzt werden:

Form1.wert = 2; //Und hier braucht es einen funktionierenden Code, das heißt ich will von Form 2 auf Form 1 zugreifen

Erklärungen (@Athur83):
Nach einem Schulprojekt - dem Bau eines Asuro, habe ich gelernt, wie die Sprache C funktioniert. Leider sind die Anwendungen hässlich, also habe ich mich nach viel Recherche an Visual Studio 2010 gesetzt.
Als in diesem Bereich blutiger Anfänger fehlte mir eben der genau Name der Programmiersprache, vermutlich C#.
Ebenso fehlen mir als Schüler Kenntnisse über Fachbegriffe einschließlich Klassendeklarationen (Was ist eine Klasse?)
Durch viel Recherche im Web kann man sich aber langsam fortpuzzlen, schlussendlich hilft auch C wieder (Schleifen, Variablen). So werden hier zwei = in einer if Schleife benutzt, bei C nur eines. Auch der Aufbau ist anders. Nun stösst das Web aber an seine Grenzen, denn leider verwenden ältere Visual Studio Versionen andere Sprachen.

Wer mich irgendwo richtig stellen kann, soll das ruhig schreiben...
Bitte schreibt den Code und keine komplizierten Fachbegriffe.
Von einem Beispielcode kann ich viel mehr lernen als bloß von Fachbegriffen, die ich nicht verstehe.


Gruß Majus

Benutzeravatar
steffalk
ft:pedia-Herausgeber
Beiträge: 1794
Registriert: 01 Nov 2010, 16:41
Wohnort: Karlsruhe
Kontaktdaten:

Re: Einige Fragen zu C#

Beitrag von steffalk » 13 Sep 2012, 17:22

Hallo Majus,

also zwei Dinge:

1. Wie können zwei Forms miteinander reden?

Viele Wege führen nach Rom, aber einer geht so: Wenn Form1 z.B. Form2 etwas mitteilen soll durch Setzen einer Eigenschaft oder Aufrufen einer Methode darin, brauchst Du Folgendes:

a) Form2 muss die Eigenschaft oder Methode haben (oder auch einfach ein Feld wie in 'public int MeineZahl;').

b) Form1 braucht einen Verweis auf Form2, damit es weiß, wem es eigentlich was sagen soll. Wenn Form1 also als 'public class Form1: Form' deklariert ist, pack also in Form1 ein Eigenschaft oder ein Feld mit dem Datentyp von Form2. Z. B in Form1: public Form2 ZielForm;

c) Nach dem Erzeugen der Formulare sagst Du nun dem Form1 die Instanz von Form2, mit der es reden soll:

Form1 form1 = new Form1();
Form2 form2 = new Form2();

form1.ZielForm = form2;

d) Nun kann in Form1 irgend eine Methode auf Form2 zu greifen, etwa durch:

ZielForm.MeineZahl = 5;
ZielForm.IrgendEineMethodeDieAufgerufenWerdenSoll(argumente);

2. Was ist eine Klasse?

Kurz gesagt, ein Begriff für was total simples, der aber cooler klingen und Eindruck schinden soll. Es geht einfach darum, Datenstrukturen typsicher erweitern zu können, in dem Sinne, dass man Instanzen der Erweiterung auch immer noch wie Instanzen der Grundlage ("Basisklasse") verwenden kann.

Beispiel:

Alle Tiere haben Namen:

public class Tier {public string Name;}

Vögel haben auch noch eine maximale Flughöhe, sind aber eben immer noch auch Tiere:

public class Vogel: Tier {public int FlughoeheInM;}

Hund dagegen haben eine Anzahl von Flöhen zusätzlich:

public class Hund: Tier {public int AnzahlFloehe;}

Und jetzt kommen die Gags bei der Geschichte:

private Tier meinTier;

meinTier = new Tier();
meinTier.Name = 'Hansi';

Das war ja noch billig. Es geht aber eben auch:

private meinVogel = new Vogel();
meinVogel.Name = 'Butzi'; /* Vögel sind ja immer noch Tiere */
meinVogel.FlugHoeheInM = 500;

Es geht aber auch:

meinTier = meinVogel; /* Vögel sind auch Tiere, deshalb kann man einen Vogel einer Tier-Variable zuweisen! */
Debug.Print(meinTier.Name);

Und noch nützlicher ist es, dass Du jetzt Arrays, Listen und ähnliche Datenstrukturen von Tieren (!) haben kannst, in die Du alle Tierarten hineinpacken kannst:

private meineTiere = new List<Tier>;

meineTiere.Add(new Vogel());
meineTiere.Add(new Hund());
meineTiere.Add(new Tier());

foreach (tier in meineTiere) {Debug.Print(tier.Name)}}

In die Tier-Liste können also Objekte (Instanzen) von irgendwelchen Klassen hinein, die selbst Tier sind oder Tier um weitere Eigenschaften oder Methoden erweitern. In OO-Terminologie nennt sich das dann Klassen, die von Tier "erben" - ein furchtbar dämlicher Begriff. Es ist nämlich niemand gestorben, sondern es wird einfach gesagt, "Hier haben wir etwas (Hund), was ein Tier ist, aber eben noch irgendetwas hat oder kann". Der Datentyp Tier (die "Klasse") wir also einfach erweitert - und der Gag ist, dass das Resultat dieser Erweiterung immer noch "zuweisungs-kompatibel" ist. Ich kann also eine Instanz von Hund oder Vogel in einer Variablen vom Typ Tier speichern, und der Compiler meckert nicht, sondern weiß genau, was zu tun ist.

Auch nach

meinTier = meinHund;

bleibt der Hund ein Hund. Er wird nicht etwa zu einem "reinen Tier" kaputt gemacht. Nur weiß die Variable meinTier das eben nicht. Aber wenn Du es im Programm weißt, kannst Du durchaus schreiben:

private Hund meinLieblingsHund = meinTier as Hund;

Zur Laufzeit (!) wird dann geguckt, ob das meinTier *tatsächlich* nicht nur ein Tier, sondern auch ein Hund ist. Wenn er es ist, wird die Zuweisung gemacht, wenn nicht, mach das "as" daraus null.

Ist's hilfreich?

Gruß,
Stefan

Majus
Beiträge: 129
Registriert: 30 Nov 2010, 15:35
Wohnort: Deutschland

Re: Einige Fragen zu C#

Beitrag von Majus » 14 Sep 2012, 23:12

Hallo,

ein großes Lob an Steffalk, so könnte man ein ganzes Buch schreiben (außer halt "dass Forms miteinander reden" :-)). Wenn mir jetzt noch bestätigt werden würde, dass ich in C# programmiere, wäre ich glücklich...

Ob es mir hilft, kann ich jetzt noch nicht sagen. Das wird sich zeigen, denn es wird dauern, bis ich den ganzen Informationen folgen kann und diese auch umsetzen kann. Jetzt versuche ich erstmal das hier Geschriebene einzubauen und falls weitere Fragen entstehen sollten, melde ich mich (die Fragen werden aufgrund meines C#-Niveaus nicht sehr kompliziert werden)

Gruß
Majus

Benutzeravatar
steffalk
ft:pedia-Herausgeber
Beiträge: 1794
Registriert: 01 Nov 2010, 16:41
Wohnort: Karlsruhe
Kontaktdaten:

Re: Einige Fragen zu C#

Beitrag von steffalk » 15 Sep 2012, 10:54

Tach auch!

Ja, das was Du machst, ist C# (und damit eine .net-Sprache wie VB, F# und eine ganze Reihe anderer auch).

Gruß,
Stefan

Antworten