[Windows Forms] TextBox Zeichen für Zeichen auslesen und zuweisen
-
Guten Abend leute
Ich habe folgendes Problem, ich würde gerne einen Encrypter für Key's schreiben, die Key's können in 2 Varianten aufgebaut sein (00-E8-5D-10-85-70-43-F8-61-D9-80-B9-B4-D8-38 || HHD5-T8RGV-V7RGW-5G57D-FG$FD)
Dabei sollen die ersten 4 Zeichen jeweils um eine zufällige anzahl nach oben bzw unten gerückt werden, so wird ein A mit 2 nach oben zum C, oder mit 1 nach unten zum Z, bei Zahlen das gleiche mit 0-9.
Die Anzahl wie viel man nach oben oder unten muss wiederholt sich nach den ersten 5 Zeichen genau im selben ablauf erneut, bis zum ende.Der User soll angezeigt bekommen was er bei den ersten 5 und damit praktisch für alle Zeichen tuen muss.
______Ich scheitere allerdings schon am Anfang, wie kann ich eine TextBox auslesen, und jedes einzelne Zeichen einer Variabel zuweisen? Ich bekomme es einfach nicht hin den Inhalt der TextBox welcher in einer String ist zu zerlegen geschweige denn sie direkt einzeln auszulesen..
Ich hoffe ihr könnt mir weiterhelfen!
Mfg
Sync!
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Mehrere Möglichkeiten:
1. Du gehst die TextBox mit einer for-Schleife durch.for (int i = 1; i <= myTextBox->Text->Length; i++) { string zuVerarbeiten = myTextBox1->Text->Substring(i, 1); // tu was.. :) }
2. Möglichkeit: Du verwandelst alles in ein CharArray.
char[] textBoxChars = myTextBox->Text->ToCharArray();
3. Du durchläufst zusätzlich zu (2) alles mit einer foreach-Schleife
foreach(char c in textBoxChars) { // tu was mit c; // Alternativ, konvertiere c in einen String: string zuVerarbeiten = c->ToString(); // tu was mit dem String }
^^Jenachdem ob du einen String oder ein Char verarbeiten willst..
Außerdem musst du die Strings glaube ich etwas anders machen als ich es gemacht hab.. Ich programmiere eigentlich nur mit C#, daher.. Irgendwo muss nen Pointer hin, mehr weiß ich nicht.
-
Beim ersten Spuckt er mir ein Error aus, und das 2te bekomme ich auch nicht richtig hin :x
Ich verstehe nicht recht was 'string zuVerarbeiten' sein soll, kann ich stattdessen dort einfach meinen String namen einsetzen? und der Teil hinter Substring, was bedeutet die Klammer, welche optionen habe ich dort? Hat die 1 eine bedeutung ?
Und zu den Char array, ich weiß nicht recht wie ich den teil vorm gleichheitszeichen behandeln soll, ich habe es mit char Digit[30] probiert, allerdings macht dann das textBoxChars probleme und lösche ich dies so tritt ein fehler auf :xMfg!
Sync
-
Also...
Wie sind die Fehlermeldungen?
der string 'zuVerarbeiten' ist jeweils ein einzelnes Zeichen als String.
Du musst den String entsprechend in c++-Syntax Deklarieren oder kannst auch direkt mit der Substring-Methode arbeiten. Allerdings musst du in der ersten for-Schleife in den Parametern i mit Wert 0 anstatt 1 inistiallisieren und das geleichheitszeichen entfernen (bei der 1. Möglichkeit hast du wahrscheinlich eine 'IndexOutOfRangeException' - Mein Fehler)Die for-Schleife:
for (int i = 0; i < myTextBox->Text->Length; i++) /*Nimm zählvariable 'i', und wiederhole die Schleife solange i kleiner ist als der Text lang ist*/ { string zuVerarbeiten = myTextBox1->Text->Substring(i, 1); /*Der String soll sein: Der Teilstring des TextBox-Textes, beginnend bei Zählvariable und mit der Länge 1 (< das ist die 1)*/ // diesen String/dieses Zeichen als String kannst du jetzt verarbeiten }
Das sorgt dafür, dass durch das hochzählen von i jeden Durchlauf ein Zeichen weiter Hinten genommen wird.
Zu den Klammern
`Beim Programmieren gibt es Eigenschaften, die man Über, Ihren Namen, die Übergeordneten Namepaces oder die übergeordnete Methode abrufen oder setzen kann (seidenn sie sind Schreibgeschützt).
Und es gibt Methoden, die Führen so gut wie immer Quellcode aus, stellen etwas an, lesen Eigenschaften oder Variablen aus und/oder bauen irgendwie mist. Ohne Methoden, keine Exceptions.
Es gibt void-Methoden die stellen nur etwas an und es gibt welche, die geben einen Wert zurück: Es gibt welche die geben strings zurück, welche die geben bools zurück und und und.. Man kann Variablen oder Eigenschaften diesen zweiten Typ von Methode zuweisen. Allerdings geht das ganze nach Hinten los, wenn man z.B. einer bool Variable eine String-Rückgabe-Methode zuweißt:
[code]bool x = textBox1.Substring(1, 2);[/code]
Einer Methode kann man zusätzliche Infos geben: Paramter, wie einer Anwendung auch, wenn man sie über die CMD oder eine Verknüpfung startet..
Methoden sehen verschiedene Paramter vor, die auch Namen haben, an welchen man im Normal erkennt, was sie von einem wollen:
[code]s.Substring(int StartIndex, int Length);[/code]
^^Was muss man da wohl angeben?? ^^
Dann gibt es auch noch überladungen, es gibt verschiedene Möglichkeiten für die Konstellationen aus Parametern. Das Programm erkennt anhand der angegebenen Variablen-Typen oder der Anzahl der Parameter, welche Überladung man gerne hätte. Eine andere Überladung für die Substring();-Methode ist die:
[code]s.Substring(int StartIndex);[/code]
^^Wenn man nur eine Zahl angibt, nimmt er diese Überladung und übergibt die gesammte Zeichenfolge ab diesem Punkt
`
Dem CharArray musst du garkeine Begrenzung für die Felder angeben.. Du sagst Einfach das CharArray >>char[]<< Namens xy >>char[] xy<< soll sein >>char[] xy =<< Der String/Der Text >>char[] xy = myTextBox->Text<< als CharArray - Die Methode hat keine Parameter >>char[] xy = myTextBox->Text.ToCharArray();<<
Oder in Quellcode-Tags:
char[] xy = myTextBox->Text.ToCharArray();
Edit: Für die Foreach-Schleife.. Das >>textBoxChars<< steht da weil ich das Array davor so genannt hab. Klapper einfach dein Array Durch. Also gib auch einfach dem Namen DEINES Arrays an..
Edit II: Ups.. In c++ musst du die foreach-Schleife getrennt schreiben..
for each (...)
LG, Darius..
-
Perfekt die Schleife hat einwandfrei funktioniert
Ich kann auch den Quellcode nachvollziehen, es ist nur sehr schwer für mich informationen im Netz zu finden da die Sprache ja leider ausstirbt.Eine frage hätte ich noch, wie kann ich das Programm bei betätigung eines Knopfes überprüfen lassen ob die TextBox genau XX Zeichen enthält, und falls dies nicht der fall ist eine MessageBox ausspucken lassen?
Mit freundlichen Grüßen!
-
Hallo Sync911,
auch für dich gilt Windows Forms und Visual C++ MACHT KEINEN SINN! (dir scheinen ja die elementaren Kenntnisse von C++ zu fehlen, so daß dann erst recht C++/CLI nichts für dich ist!)
-
Tut mir leid aber C++ ist bestandteil meiner Ausbild von daher werde ich erstmal nicht davon absehen es aufzugeben Ich möchte lediglich mein Wissen perfektionieren, dann fällt es mir auch leichter auf zb C# umzusteigen, aber das kommt alles noch
MfG
-
C++/CLI ist nicht C++. Wenn du C++ lernen willst, dann lern C++. Wenn du Windows Forms Anwendungen schreiben willst, dann nimm C#. In jedem Fall ist C++/CLI nicht was du willst...
-
if (myTextBox->Text->Length /*Eigenschaft!! ;)*/ != 20) MessageBox::Show("Der eingegebene Text hat nicht die passende Länge!", "Fehler", MessageBoxButtons::OK, MessageBoxIcon::Error); // Alternativ: MessageBoxIcon::Warning else // Mach was du willst..
bzw.
if (myTextBox->Text->Length == 20) // Mach was du willst else MessageBox(Blablabla);
Nimmt sich ja irgendwie nichts..