Zum Inhalt springen

conny<

Mitglieder
  • Gesamte Inhalte

    8
  • Benutzer seit

  • Letzter Besuch

  1. Boah ey.... programmieren ist echt nur ein Gehangle von Problem zu Problem... Ich glaub ich mir doch als erste Programmierpraxis ein Tick zu schwieriges Beispiel ausgesucht... Naja, ich beschreib mal mein Problem: Die Methode faerben(int index, Color currentColor) soll aus einer Listbox(lstAusgabe) an der Position index einen String auslesen. Die Liste schaut ungefähr so aus: 64 die 39 der 20 ist 12 man 9 er ... Nun muss ich logischerweise den String spliten und dann trimen. Von dem zurückgegebenen Array das letzte Element sollte das Wort beinhalten, welches ich im Text(der in txtHauptfeld(RichTextBox) steht) färben will(mit currentColor). Wichtig dabei ist, dass das Programm den Unterschied zwischen dem Wort man und dem Worteil jemand erkennt. Ich habe geschrieben: public void faerben(int index, Color currentColor) { // Erst alles wieder normal machen txtHauptfeld.SelectAll(); txtHauptfeld.SelectionBackColor = Color.White; int pos = 0; int suc = 0; if (index < words.Count) { String temp = Convert.ToString(lstAusgabe.Items[index]); String[] tempSplit = temp.Split(' '); int WordsToColor = Convert.ToInt32(tempSplit[0]); String WordToColor = tempSplit[tempSplit.Length - 1].Trim(); Boolean frontIsLetter = false; while (suc < WordsToColor) { int selectStart = txtHauptfeld.Text.IndexOf(WordToColor, pos); if (selectStart > 0 && selectStart < txtHauptfeld.Text.Length) { try { txtHauptfeld.Select(selectStart, WordToColor.Length); // ArgumentOutOfRangeException if (selectStart != 0) { int frontValue = Convert.ToInt32(txtHauptfeld.Text[selectStart - 1]); if ((frontValue > 64 && frontValue < 92) || (frontValue > 96 && frontValue < 123) || frontValue == 246 || frontValue == 228 || frontValue == 252 || frontValue == 220 || frontValue == 214 || frontValue == 196) frontIsLetter = true; } int backValue = Convert.ToInt32(txtHauptfeld.Text[selectStart + txtHauptfeld.SelectedText.Length]); if (!((backValue > 64 && backValue < 92) || frontIsLetter || (backValue > 96 && backValue < 123) || backValue == 246 || backValue == 228 || backValue == 252 || backValue == 220 || backValue == 214 || backValue == 196)) { txtHauptfeld.SelectionBackColor = currentColor; pos = selectStart + txtHauptfeld.SelectionLength; suc++; } else pos = selectStart + txtHauptfeld.SelectionLength; } catch (Exception e) { MessageBox.Show(e.Message); } } else pos = selectStart + txtHauptfeld.SelectionLength; } } } Ich schätze ich programmiere noch deutlich zu kompliziert... Ich bekomme nun bei dieser Codezeile, txtHauptfeld.Select(selectStart, WordToColor.Length); eine ArgumentOutOfRangeException. Dabei habe ich keinen Schimmer wie es dazu kommt. Die Methode wird ausschließlich durch das SelectedIndexChange von der lstAusgabe aufgerufen: private void lstAusgabe_SelectedIndexChanged(object sender, EventArgs e) { if (lstAusgabe.SelectedIndex != 0) if (farbig) faerben(lstAusgabe.SelectedIndex, Color.Red); } wär echt schön wenn mir da noch wer helfen könnte, dann könnte ich zumindest mein erstes Projekt abschließen. Gruß Conny
  2. Boah ey.... programmieren ist echt nur ein Gehangle von Problem zu Problem... Ich glaub ich mir doch als erste Programmierpraxis ein Tick zu schwieriges Beispiel ausgesucht... Naja, ich beschreib mal mein Problem: Die Methode faerben(int index, Color currentColor) soll aus einer Listbox(lstAusgabe) an der Position index einen String auslesen. Die Liste schaut ungefähr so aus: 64 die 39 der 20 ist 12 man 9 er ... Nun muss ich logischerweise den String spliten und dann trimen. Von dem zurückgegebenen Array das letzte Element sollte das Wort beinhalten, welches ich im Text(der in txtHauptfeld(RichTextBox) steht) färben will(mit currentColor). Ich habe geschrieben: public void faerben(int index, Color currentColor) { // Erst alles wieder normal machen txtHauptfeld.SelectAll(); txtHauptfeld.SelectionBackColor = Color.White; int pos = 0; int suc = 0; if (index < words.Count) { String temp = Convert.ToString(lstAusgabe.Items[index]); String[] tempSplit = temp.Split(' '); int WordsToColor = Convert.ToInt32(tempSplit[0]); String WordToColor = tempSplit[tempSplit.Length - 1].Trim(); Boolean frontIsLetter = false; while (suc < WordsToColor) { int selectStart = txtHauptfeld.Text.IndexOf(WordToColor, pos); if (selectStart > 0 && selectStart < txtHauptfeld.Text.Length) { try { txtHauptfeld.Select(selectStart, WordToColor.Length); // ArgumentOutOfRangeException if (selectStart != 0) { int frontValue = Convert.ToInt32(txtHauptfeld.Text[selectStart - 1]); if ((frontValue > 64 && frontValue < 92) || (frontValue > 96 && frontValue < 123) || frontValue == 246 || frontValue == 228 || frontValue == 252 || frontValue == 220 || frontValue == 214 || frontValue == 196) frontIsLetter = true; } int backValue = Convert.ToInt32(txtHauptfeld.Text[selectStart + txtHauptfeld.SelectedText.Length]); if (!((backValue > 64 && backValue < 92) || frontIsLetter || (backValue > 96 && backValue < 123) || backValue == 246 || backValue == 228 || backValue == 252 || backValue == 220 || backValue == 214 || backValue == 196)) { txtHauptfeld.SelectionBackColor = currentColor; pos = selectStart + txtHauptfeld.SelectionLength; suc++; } else pos = selectStart + txtHauptfeld.SelectionLength; } catch (Exception e) { MessageBox.Show(e.Message); } } else pos = selectStart + txtHauptfeld.SelectionLength; } } } Ich schätze ich programmiere noch deutlich zu kompliziert... Ich bekomme nun bei dieser Codezeile, txtHauptfeld.Select(selectStart, WordToColor.Length); eine ArgumentOutOfRangeException. Dabei habe ich keinen Schimmer wie es dazu kommt. Die Methode wird ausschließlich durch das SelectedIndexChange von der lstAusgabe aufgerufen: private void lstAusgabe_SelectedIndexChanged(object sender, EventArgs e) { if (lstAusgabe.SelectedIndex != 0) if (farbig) faerben(lstAusgabe.SelectedIndex, Color.Red); } wär echt schön wenn mir da noch wer helfen könnte, dann könnte ich zumindest mein erstes Projekt abschließen. Gruß Conny
  3. conny<

    Neuer PC

    jup wird immer von nem Admin (und der hat Ahnung in dem was er tut) von computerbase aktuallisiert. Des merkt man ja auch wenn man die verwendeten Komponenten begutachtet. die GTX 470 galt vor 3 Jahren wohl noch nicht als empfohlen Gruß Conny
  4. Ah okay, so kommt Licht ins dunkle meines Verstandes....:upps Gruß Conny
  5. nochmal danke.. ich hab aber immer noch nicht ganz den Vorteil von generischen Listen gegenüber einer ArrayList verstanden.:confused: Ich glaub ich muss nochmal die LINQ-Abragen:upps wiederholen. Naja wennigstens kann ich jetzt ruhig weiterprogrammieren. Gruß Conny
  6. Joa, rießen dank!! Hab die Methode gleich in meinem Programm verbaut(Des nebenbei zählen soll wie oft jedes Wort in einem Text vorkommt...). Funktioniert super. Danke.... Gruß Conny
  7. conny<

    Neuer PC

    [FAQ] Der ideale Gaming-PC - ForumBase da steht was du brauchst
  8. Hallo, ich lerne seit einigen Wochen C# und habe versucht eine Methode zu programmieren, mit der ich einen String aus dem Parameter, so zerlegen kann, dass die einzelnen Wörter ohne .,!,?,Zeilenumbrüche, usw. in einer ArrayList zurückgegeben werden. Bin aber leider an eine Schwelle meiner Ideen gekommen und hab mich nach einer Stunde verzweifelten Denkens, dazu entschieden ein paar Fachleute zu fragen. Wär echt toll wenn mir wer helfen könnte. Mein Code: public ArrayList WoerterEinlesen(String text) { Char[] trimArr = new Char[5]{' ', '!', '.', '?', '\n'}; ArrayList words = new ArrayList(); int pos = 0; int signs = 0; // D A S I S T E I N B E I S P I E L // 0 1 2 3 4 5 6 7 8 9 // Solange die Startposition nicht das Ende des Textes erreicht while (pos + signs < text.Length) { // wird die Anzahl der Zeichen bis zum nächsten Leerzeichen in signs gespeichert signs = text.IndexOf(" ", pos); if (signs < 1) signs = text.IndexOf(".", pos); if (signs < 1) signs = text.IndexOf("!", pos); if (signs < 1) signs = text.IndexOf("?", pos); // wenn signs 0 ist braucht man nichts zu tun if (signs > 0) { // ein neues CharArray, mit so vielen Plätzen // wie unser Wort lang ist wird erstellt Char[] chrArr = new Char[signs]; // Solange die Zählervariable i nicht die Länge des Wortes erreicht for (int i = 0; i < signs; i++) { // schreibe den Text in das CharArray chrArr[i] = text[pos + i]; // IndexOutOfRange Exeption... } // Anschließend wird aus dem CharArray ein String und der wird words(ArrayList) // angefügt words.Add(new String(chrArr).Trim(trimArr)); } pos = signs + 1; } return words; } Gruß Conny

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...