Autor Beitrag
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Do 24.01.13 20:58 
Also das halte ich für die falsche Herangehensweise ^^


Ich weiß nicht, wie du Programmieren gelernt hast, aber ohne Lehrer ist das schwer. Ich hab die Erfahrung gemacht, dass das nur funktioniert, wenn man nicht auf gibt, bis ein Problem gelöst ist oder klar ist, warum es nicht gelöst werden kann.


Poste doch mal deinen bisherigen Code, dann können wir mal drüber schauen und Tipps geben, wo der Fehler liegen könnte.
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Fr 25.01.13 09:53 
Alsoooooo. Probiers mal so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
StringBuilder stringBuilder = new StringBuilder();

// Alle Zeilen durchgehen und prüfen, ob zwei leere Zeilen hintereinander kommen
// Wenn nein, füge sie zum StringBuilder hinzu

string lastLine = "blabla"// Darf nicht leer sein, sonst evtl Leerzeile am Anfang des Textes

foreach (string line in boxZusammenfassung.Lines)
{
  string s = line.Trim(); // Evtl Leerzeichen entfernen


  if (!String.IsNullOrEmpty(s))
  {

      // Hier noch der Vergleich der Variablen
      // Trim, um Leerzeilen am Anfang und Ende der Thema TextBox zu entfernen
      if (s.Contains("%THEMA%")) s = s.Replace("%THEMA%", boxThema.Text.Trim());
      // usw ...

      if (String.IsNullOrEmpty(lastLine)) stringBuilder.AppendLine(); // Leere Zeile einfügen
      stringBuilder.AppendLine(s); // Text einfügen
  }
  lastLine = s;
}

// Text wieder reinschreiben und Leerzeichen löschen
boxZusammenfassung.Text = stringBuilder.ToString();


/// EDIT
Sry hab 2. Seite nicht gesehen.

Untersuch mal das Schnipsel und guck ob du alles begriffen hast.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
DarkStaRX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28
Erhaltene Danke: 3



BeitragVerfasst: Sa 26.01.13 19:09 
user profile iconC# hat folgendes geschrieben Zum zitierten Posting springen:
Alsoooooo. Probiers mal so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
StringBuilder stringBuilder = new StringBuilder();

// Alle Zeilen durchgehen und prüfen, ob zwei leere Zeilen hintereinander kommen
// Wenn nein, füge sie zum StringBuilder hinzu

string lastLine = "blabla"// Darf nicht leer sein, sonst evtl Leerzeile am Anfang des Textes

foreach (string line in boxZusammenfassung.Lines)
{
  string s = line.Trim(); // Evtl Leerzeichen entfernen


  if (!String.IsNullOrEmpty(s))
  {

      // Hier noch der Vergleich der Variablen
      // Trim, um Leerzeilen am Anfang und Ende der Thema TextBox zu entfernen
      if (s.Contains("%THEMA%")) s = s.Replace("%THEMA%", boxThema.Text.Trim());
      // usw ...

      if (String.IsNullOrEmpty(lastLine)) stringBuilder.AppendLine(); // Leere Zeile einfügen
      stringBuilder.AppendLine(s); // Text einfügen
  }
  lastLine = s;
}

// Text wieder reinschreiben und Leerzeichen löschen
boxZusammenfassung.Text = stringBuilder.ToString();


/// EDIT
Sry hab 2. Seite nicht gesehen.

Untersuch mal das Schnipsel und guck ob du alles begriffen hast.



Man erstellt einen StringBuilder;
Ein string LastLine... mit irgendeinem Text

Dann kommt die foreach Schleife, dort speichert man in der String Variable "s" die Zeile der Textbox (Ergebnis) und entfernt leerzeichen

Dann prüft man ob die Zeile != Nichts enthält
Wenn das zutrifft prüft man ob "s" die Variable "%THEMA% enthält und ersetzt dann die Variable mit dem Text aus der Textbox? (Textbox ist ja leer also wird dann wohl "" ersetzt?)
Wenn "LastLine" nichts enthält wird dem StringBuilder eine zeile hinzugefügt und der ersetzte Text....

Anschließen wird der neue Text vom StringBuilder in die TextBox gesetzt.
Aber irgendwie klingt mir das nicht ganz nach meinem Ergebnis das ich erzielen möchte.

Im Anhang habe ich das Programm mal gebaut und mein derzeitiger Code ist dort.

Sieht eigentlich auch nur so aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
            //VARIABLE %THEMA% ersetzen
            if (!String.IsNullOrEmpty(txt_thema.Text))
            {
                //VARIABLE mit TextBox Text ersetzen
                textvorlage.Text = textvorlage.Text.Replace("%THEMA%", txt_thema.Text);
            }
            else
            {
                textvorlage.Text = textvorlage.Text.Replace("%THEMA%"""); // PLUS DIE X ZEILEN DANACH BIS ZUR NÄCHSTEN VARIABLEN (X = ZEILENUMBRÜCHE NACH DER VARIABLE %THEMA% BIS ZUR NÄCHSTEN VARIABLE
            }
Einloggen, um Attachments anzusehen!
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: So 27.01.13 13:52 
Also 1. Wenn die entsprechende Textbox leer ist, wird %THEMA% einfach durch "" ersetzt, also KEIN Leerzeichen und nix.
2. was soll das mit der Textbox textvorlage? Die macht überhaupt keinen Sinn. Da kannste n einfachen string nehmen.
3. Dieser string würde überflüssig werden.

Ich habe einen kleinen Fehler bei meinem Code entdeckt.
Hier der funktionierende Code:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
StringBuilder stringBuilder = new StringBuilder();

// Alle Zeilen durchgehen und prüfen, ob zwei leere Zeilen hintereinander kommen
// Wenn nein, füge sie zum StringBuilder hinzu

string lastLine = "blabla"// Darf nicht leer sein, sonst evtl Leerzeile am Anfang des Textes

foreach (string line in boxZusammenfassung.Lines)
{
  string s = line.Trim(); // Evtl Leerzeichen entfernen

  // Hier noch der Vergleich der Variablen
  // Trim, um Leerzeilen am Anfang und Ende der Thema TextBox zu entfernen
  if (s.Contains("%THEMA%")) s = s.Replace("%THEMA%", boxThema.Text.Trim());
  //   usw ...

  if (!String.IsNullOrEmpty(s))
  {
      if (String.IsNullOrEmpty(lastLine)) stringBuilder.AppendLine(); // Leere Zeile einfügen
      stringBuilder.AppendLine(s); // Text einfügen
  }
  lastLine = s;
}

// Text wieder reinschreiben und Leerzeichen löschen
boxZusammenfassung.Text = stringBuilder.ToString();


Ich habe dein Projekt so bearbeitet, das dieser Teil funktioniert.
Einloggen, um Attachments anzusehen!
_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
DarkStaRX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28
Erhaltene Danke: 3



BeitragVerfasst: So 27.01.13 20:31 
Die Textbox Vorlage dient dazu jedem Benutzer der das Programm benutzt sein eigene Vorlage zu erstellen, auch mit unterschiedlichen Abständen zwischen den Variablen.

Bei dem Programm das du im Anhang gepostet hast ist am Ende (Ergebnis Form) Nach jedem Text nur 1 Zeilenumbruch was ja laut der Vorlage bei manchen nicht so ist da es 2 sind
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Mo 28.01.13 18:39 
Achso du willst auch mehr Leerzeilen haben. Das ist nicht sonderlich schwer. Kannste ohne großen Ärger mein Schnipsel ändern. Ich denke da kommste schon von alleine drauf.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler