C# , ein grosses C mit kleine Zaun, darauf will ich jetzt vertraun


ademo

Mitglied
Huhu ich wollte mich nur kurz einmischen und zu bedenken geben das sich seit "Visual C# 2005 sehr viel geändert hat! C# wird fast jedes Jahr erweitert und es gibt inzwischen viel einfachere Lösungen gerade mit LINQ, Asynchrone Methoden, Partielle Methoden oder auch die ganze WPF / WCF Geschichte. Ich möchte nicht sagen das die Dinge in dem Buch falsch sind aber wenn du von Mac auf Windows 7 umsteigen willst kaufst du dir auch kein Buch über Windows xp ;) auch wen bei beiden beim Rechtsklick das gleiche Menü kommt ;)
 

Duda

Erfahrenes Mitglied
Hallo ademo,
danke für Dein Feedback. Mit dem was Du zum Ausdruck bringen möchtest, da hast Du wohl recht. Doch ich bin eigentlich mit den Grundlagen, welche ja nach wie vor gültig sind, schon zufrieden.
Was ich zum Ausdruck bringen wollte, ist ganz einfach, daß ich
mich für nur 1,00 EUR an Wissen bereichern kann, welches für meine Zwecke voll und ganz ausreicht. Es ist natürlich nicht ausgeschlossen,
daß ich mir bei weiterem Bedarf auch noch nach ein aktuelleres
Kompendium beschaffe, aber wie ich schon mal geschrieben hatte.
Mit Visual C# 2010 da wird es sicher gehn. Das heißt, daß ich auch mehrer Bücher zu C# 2010 habe.
Damit meine ich nicht nur, daß es für mich mehr als ausreicht, sondern auch, daß es mehr als genug sein wird für meine Belange. Denn ich schreibe nur mal aus Lust und Laune an einem kleinem Hobby-Programm, wobei es nicht so drauf ankommt, welchem Buch b.z.w. welcher Jahrgangs-Version der Programmiersprache ich den Beispiel-Code entnommen habe.
Die Hauptsache hierbei ist, daß ich die richtige Sprache verwende und daß es funktioniert. Ich habe sehr viele gute Ratschläge hier im Forum erhalten, welche hilfreich für mich waren. Wofür ich den Moderatoren und einigen Mitgliedern dankbar bin. Doch Deinen Hinweis auf aktuelle, erweiterte Versionen, welche es einfacher machen, den lege ich erstmal zur Seite.
Also machs gut und bis bald mal wieder.

Viele Grüsse

Duda
 

Duda

Erfahrenes Mitglied
Hallo ademao,

ich freue mich, daß Du mir da diverse Links offerierst und natürlich danke für Deine Mühe. Aber ich mache wirklich nur einfache Sachen und da helfen
mir meine Bücher, bis auf die Fragen, die ich hier im Forum stelle, eigentlich schon gut weiter. Also nochmals danke für Deine Mühe, aber mit derartig viele Videos und sonstige Informationen, da bin ich wirklich hoffnungslos überfordert. Mehr Freude macht es mir, wenn ich von Dir oder anderen Mitgliedern des Forums, hilfreiche Antworten auf Fragen von mir bekomme. Da ich schon einige gute Ratschläge von den Mitgliedern Endurion und MCoder hier in diesem Thread erhalten habe, deswegen wende ich mich im folgendem Post auch an diese Beiden. Wobei natürlich alle anderen Mitglieder nicht ausgeschlossen sind.

Also machs gut

Duda
 

Duda

Erfahrenes Mitglied
Hallo Endurion, MCoder und Comunity,

bin mal wieder auf Sendung, könnte man sagen, aber eigentlich habe ich wieder nur ein paar Fragen. Wobei ich an den Beispiel-Code von Endurion anschließen möchte. Ich frage mich, ob es möglich ist "meineWerte" mit "for" zu durchlaufen und dabei eine "Sum1" der ungeraden Positionen/Lenght und eine "Sum2" der geraden Positionen/Lenght zu bilden. Hatte einen ähnlichen Codebeispiel schonmal von dem Mitglied Cromon, aber es hatte sich auf C++ bezogen. Nun muß ich wissen ob es auch in C# funktioniert.
Und natürlich muß ich wissen, ob sich ein Array mit einer for-Schleife durchlaufen läßt und ob es funktioniert wie es mein folgender Code zeigt.

C#:
for (int i = 0; i < str.Length; ++i);
{
meineWerte[i] = Convert.ToInt32(str.Substring(i, 1), 16);
}
int sum1 = 0;
int sum2 = 0;
for (int i = 0; meineWerte.Length; i+=2)
{
sum1 += meineWerte[i];
sum2 += 3 * meineWerte[i + 1]:
}     
int sum3 = sum1 + sum2;
int sum4 = sum3 % 36;


Weiterhin bitte ich um Antwort zur Validation. Ich möchte eine bestimmte Anzahl Zeichen sicherstellen. Das soll die Anwendung mit übernehmen. Vorher habe ich nach Überprüfung mit einem button-Click alles geregelt. Dazu hatte ich bis jetzt folgenden Code.

C#:
privat void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "";
ActiveControl = textBox1;
}
// Das soll nun durch folgenden Code ersetzt werden.
private void myTextBox_Validating(object sender, CancelEventArgs e)
{
if (textBox1.TextLength < 17) ^ (textBox1.TextLength > 17))
{
textBox1.Text = "";
textBox1.Focus();
//eventuell, MessageBox.Show("Eingabe muß 17 Zeichen haben.");
}


Nun frage ich mich, wenn ich schon "using System.ComponentModel;"
am Anfang stehe habe, muß ich dann noch diesen beiden Zeilen irgendwo vor der Zeile einfügen: "privat void myTextBox-Validating etc.."
my TextBox.CausesValidation = true;
// es folgt ein umgebrochene Zeile
my TextBox.Validating += new System.ComponentModel.CancelEventHandler(this.myTextBox_Validating);
// oder genügt es wie es in meinem Beispiel-Code steht?

Habe zwar noch ein paar Fragen, aber ich schreibe hierzu dann nochmal.

Viele Grüsse

Duda
 

ComFreek

Mod | @comfreek
Moderator
Hallo Duda,

nun antworte ich auch mal wieder auf einen deiner Beiträge ;)

Zuerst ein paar allgemeine Hinweise:

- Bitte rücke deinen Code ein! D. h. beispielsweise, dass das, was in einem IF-Block steht, mit zwei Leerzeichen eingerückt ist.
- Bitte benutze aussagekräftigere Variablennamen. Nicht nur meineWerte, sum1 und sum2 sind betroffen, sondern auch textBox1.
- Zu deiner letzten Frage, wie es mit der Verknüpfung der Validierung aussieht, kann ich leider nicht antworten. Mit C# kenne ich mich nicht aus. Ich vermute allerdings sehr stark, dass eine alleinige Deklaration einer Funktion (wie du es getan hast) nicht ausreicht.

Alles andere steht im Code:
C#:
// FALSCH: Kein Semikolon direkt nach dem for!
// Das führt einfach nur dazu, dass das innerhalb der {} gar nicht zum for gehört,
// sondern als normaler Codeblock behandelt wird (einmalige Ausführung also)
for (int i = 0; i < str.Length; ++i);
{
  meineWerte[i] = Convert.ToInt32(str.Substring(i, 1), 16);
}
int sum1 = 0;
int sum2 = 0;
// Im Mittelteil (Bedingung) prüfst du nur auf meineWerte.Length
// Das ist wahrscheinlich nicht das, was du haben willst
// Du willst i<meineWerte.Length
for (int i = 0; meineWerte.Length; i+=2)
{
  sum1 += meineWerte[i];
  sum2 += 3 * meineWerte[i + 1]:
}    
int sum3 = sum1 + sum2;
int sum4 = sum3 % 36;
C#:
// Das soll nun durch folgenden Code ersetzt werden.
private void myTextBox_Validating(object sender, CancelEventArgs e)
{
// 1. Hier fehlt eine Klammer nach dem if (ich habe sie für dich eingefügt)
// 2. Wieso nutzt du ^? Viel einfacher wäre: if (textBox1.TextLength != 17)
// D. h. TextLength "ungleich" 17
if ((textBox1.TextLength < 17) ^ (textBox1.TextLength > 17))
{
  textBox1.Text = "";
  textBox1.Focus();
  //eventuell, MessageBox.Show("Eingabe muß 17 Zeichen haben.");
}
 

Duda

Erfahrenes Mitglied
Hallo ComFreek,

danke für Deine Berichtigungen. Ja ich habe immernoch mein Problem,
daß ich meine Fehler nicht selbst entdecke. Es ist in jedem Lehrbuch an erster Stelle zu lesen, daß an dieser Stelle kein semikolon zu stehen hat,
aber jede Anweisung ist grundsätzlich mit Semikolon abzuschliessen.
Asche auf mein Haupt, hätte da so eine kleine Kopfnuss verdient ( a la NAVI CIS). Und dann auch noch das "i <", ja das wäre schon wieder eine
Kopfnuss. Wenn die Klammer auch noch eine Nuss ergibt, dann kommt schon einiges an Nüssen zusammen.
Aller guten Dinge sind immer 3, denn meine if-Abfrage ist einfach zu kompliziert um einfach zu sein. Aber es reicht nicht für eine Kopfnuss.
Ich habe versucht logisch zu denken, deswegen habe ich das logische
XOR verwendet, weil mir die Tastenkombination für die logische ODER-
Zeichen (||, |) nicht sofort eingefallen sind. Der von Dir vorgeschlagene relationalen Operator Ungleich (!=), daß ist mir nicht in den Sinn gekommen, weil ich nur gedacht habe, nicht kleiner oder nicht grösser, was natürlich auch ungleich oder nicht gleich sein kann.
Aber nun habe ich gleiche noch eine Frage. Wenn der String nun richtig eingegeben ist und die if-Abfrage durchlaufen ist, kann man diesem String
durch Konkatenation noch ein Zeichen hinzufügen? Weil ich denke im Programm sind wir vorbei und eigentlich sollte es gehen. Oder wäre es besser den String in einen Leerstring (mit anderen Namen versteht sich)
zu kopieren und diesem String noch ein Zeichen mit "+" hinzuzufügen.
Ist nur so ein Einfall von mir, weil ich vorhabe den String mit einer Prüfziffer zu versehen. Doch nun mal wieder Schluß mit meiner unqualifizierten Fragerei. Dein Feedback hat mich sehr gefreut.

PS. Warum bekomme ich einen Zertifikiatfehler angezeigt, wenn ich "tutorials dot de" aufrufe?


Viele Grüsse

Duda
 
Zuletzt bearbeitet:

Endurion

Erfahrenes Mitglied
Wegen der using-Frage:

Wenn du oben

using System.ComponentModel;

stehen hast, dann kann der Validator auch so eingetragen werden:

my TextBox.Validating += new CancelEventHandler(this.myTextBox_Validating);

Genau dafür ist das using da. Wenn es durch zu viele usings eine Namenskollision gibt, dann muss man aber dann doch genauer werden.
Was benutzt du eigentlich als IDE? Du hättest das durch einfaches Ausprobieren testen können.


Zu der String-Frage:
Ja, du kannst natürlich noch ein Zeichen hinzufügen. Ob du einen neuen String zusammensetzt, oder an den alten anhängst, ist ziemlich egal.
Generell ist die String-Verarbeitung in managed Sprachen etwas anders als in C++. Bei C# sind Strings unveränderbar, d.h. wenn du etwas änderst, wird intern ein neues Objekt erzeugt. Bei C++ wird ein String ja als Array von Zeichen angesehen, und das lässt sich direkt ändern.
 

Duda

Erfahrenes Mitglied
Hallo Endurion,

danke Endurion, ich finde es super von Dir, daß Du mir meine hinterwäldlerischen Fragen, so kompetent beantwortest.
Zu Deiner Frage in Bezug auf IDE. Ich benutze Visual C# 2010 Express, denn ich bin ja doch irgendwie nur ein neugieriger Experimentierer, welcher ein Progrämmchen zusammenpuzzelt, welches nur meinem
Hobby dient und wenn es fertig ist, dann auch noch meinem Ego.
Ich hoffe Du verstehst wie ich es meine. Nachdem ich nun in C++, C++/CLI
und diverse andere Möglichkeiten reingeschnuppert habe,
wobei ich dann an einem für mich zu grossen Lernaufwand gestossen bin,
oder es irgendwie keine Möglichkeit für die Umsetzung meines Vorhabens
gab. Ich denke dabei an das CLI etc.., da habe ich auf Anraten einiger kompetenter Mitglieder aus der Forums-sparte C/C++ zu C# gewechselt.
So bin ich hier gelandet und fühle mich auch hier in der Sparte " .Net/.Net Cafè " recht wohl.
Auch wenn ich mir hier und da eine berechtigte Kopfnuss einhandele, welche ich mir dann selbst verabreichen muß, weil dies geht noch nicht übers I-Net..
Ich bin Euch echt dankbar, daß Ihr meine umständlichen Fragen so hilfreich beantwortet. Es ist wirklich eine Freude für mich, von Euch lernen zu können. Danke dafür an alle Beteiligten.

Viele Grüsse

Duda
 
Zuletzt bearbeitet:

Duda

Erfahrenes Mitglied
Hi ComFreek,

ich bin es nochmal, habe noch einen Fehler gefunden. Habe auch noch unabsichtlich die Doppelpunkttaste für ein Semikolon gedrückt.

PS. Hat die Website ein neues Zertifikat von Parallel(ich weiß nicht was)?
Wenn ja, dann muß ich es bei mir mit eintragen und mit meinem PC bekannt machen. Sonst wird immer gemeckert. Hatte mal zum Zertifikatfehler die MS-Hilfe aufgerufen und ich konnte es so nachlesen.

Wünsche Dir ein gute Zeit im Forum.

Viele Grüsse

Duda
 

ComFreek

Mod | @comfreek
Moderator
Hallo Duda,

ja, die Seite nutzt neuerdings HTTPS mit einem offiziell ausgestellten Zertifikat.
Normalerweise muss man nicht und sollte man nicht Zertifikate als vertrauenswürdig einstufen.
Die Frage ist nun, warum bei dir ein Zertifikatfehler angezeigt wird. Vielleicht kann dir damit @Martin Schaefer, der mitunter das Zertifikat eingerichtet hat, weiterhelfen.

Es gibt übrigens einen Unterschied zwischen & und && und | und ||. Du wirst wohl zu 99% nur && und || brauchen, also brauchst du dir um die anderen keine Gedanken machen.

Noch einen schönen Nachmittag!
 

Neue Beiträge