Autor Beitrag
Csharp-programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Mi 11.11.15 17:03 
Hallo meine Experten.

Ich habe mal wieder ein Problem, aber diesmal habe ich viele kleine Ansätze gefunden, doch es haut nicht hin. Wie ihr bereits in diesem Thema entnehmen könnt, weiß ich nun wie man den Text der ausgewählten Zeile analysieren und bearbeiten kann. Das hat ja auch alles prima hingehauen.

Nun möchte ich jedoch die SelectionStart so setzen, dass der Cursor an folgender Stelle(...)eingefügt wird:
ausblenden HTML-Dokument
1:
2:
<center>...</center>
<a href="">...</a>


An der ...-Stelle soll nun der Cursor gesetzt werden. Dafür habe ich folgende Ideen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
var line = this.richTextBox1.GetLineFromCharIndex(this.richTextBox1.SelectionStart);
var lineStart = richTextBox1.GetFirstCharIndexFromLine(line);
richTextBox1.Select(lineStart, s.Length);
string a = this.richTextBox1.SelectedText;
this.richTextBox1.SelectedText = "<" + a + "></" + a + ">";
this.richTextBox1.SelectionStart = 1 + a.Length + 3 + a.Length + 1;

Nun wird zwar der Cursor gesetzt, jedoch kann man die Funktion nicht mehr richtig nutzen. Wenn ich jetzt z.B. in eine andere Zeile gehe, wird zwar der Text wieder eingetaggt, jedoch wird die SelectionStart nicht getsetzt. Wie kann ich die SelectionStart so setzen, dass in jeder x-beliebigen Zeile der Text eingetaggt wird und die SelectionStart korrekt gesetzt wird?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 11.11.15 17:33 
Du meinst:
ausblenden C#-Quelltext
1:
richTextBox1.SelectionStart = lineStart + 2 + a.Length;					

SelectionStart ist einfach der Index vom Anfang des Textes an (unabhängig von irgendwelchen Zeilen), daher mußt du immer von Zeilenanfang (lineStart) ausgehend die Spalte dazuaddieren.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Mi 11.11.15 20:17 
Vielen Dank. Jetzt klappt es. Ich hätte jetzt nur noch folgendes Problem:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
1. Benutzer gibt die Zeichen ein, welche eingetaggt werden
      1.1 center u i
      2. Das Programm trennt die Zeichen nach der Split-Mathode
      2.1 center; u; i;
      3. Das Programm taggt die Zeichen so ein, dass die Zeichen nach dem ersten nach den eingetaggten ersten Zeichen  im Html Code sind
      3.1 <center><u><i></i></u></center>


Wobei die 1 nach der Hauptzahl das Beispiel angibt. Meine Idee bis jetzt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        var line = i = richTextBox1.GetLineFromCharIndex(this.richTextBox1.SelectionStart);
            var s = this.richTextBox1.Lines[line];

            var lineStart = richTextBox1.GetFirstCharIndexFromLine(line);
            richTextBox1.Select(lineStart, s.Length);
            string y = this.richTextBox1.SelectedText;
            string[] x = y.Split(' ');

            foreach (string yx in x)
            {
                    this.richTextBox1.SelectionStart = i;
                    richTextBox1.SelectedText = "<" + yx + "></" + yx + ">";
                    i += this.richTextBox1.SelectionStart = lineStart + 1 + yx.Length + 1;
            }


Wenn ich jetzt center b i eingebe, kommt folgendes raus: <center><b><i></i></b></center>.
So weit, so gut. Doch wenn ich nun in eine andere Zeil gehe, klappt es wieder nicht. Woran liegt es nun?
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Sa 14.11.15 21:33 
Ich habe es jetzt geschafft, dass in der ersten Zeile alles prima hinhaut und, dass der Algorithmus auch nich in der zweiten, dritten usw. funktioniert. Gebe ich center u i ein, bekomme ich <center><u><i></i></u></center>
Doch wenn ich in der zweiten Zeile center u i eingeben, bekomme ich <center><u></u></center><i></i>.

Wie kann ich es so machen, dass es in allen Zeilen so funktioniert wie in der ersten?
Mein Algorithmus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        var line = this.richTextBox1.GetLineFromCharIndex(this.richTextBox1.SelectionStart);
            var LineStart = this.richTextBox1.GetFirstCharIndexFromLine(line);
            var s = richTextBox1.Lines[line];
            richTextBox1.Select(LineStart, s.Length);
            string y = this.richTextBox1.SelectedText;
            string[] x = y.Split(' ');
            foreach (string xy in x)
            {
                richTextBox1.SelectedText = "<" + xy + "></" + xy + ">";
                i += LineStart + 2 + xy.Length;
                this.richTextBox1.SelectionStart = i;
            }
            i = 0;
           }


Mfg :)
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 15.11.15 20:09 
So meine Experten. Ich habe nun die Lösung um diesen Algorithmus gelöst. :beer:
Nach unzähligen Veruchen den Algorithmus so umzustellen, dass er in allen Zeilen gleich funktioniert und mit ganz viel Geduld und Spucke, kam nach einem langen Tag am PC sowas raus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        var line = this.richTextBox1.GetLineFromCharIndex(this.richTextBox1.SelectionStart);
            var LineStart = this.richTextBox1.GetFirstCharIndexFromLine(line);
            var s = richTextBox1.Lines[line];
            richTextBox1.Select(LineStart, s.Length);
            string y = this.richTextBox1.SelectedText;
            string[] x = y.Split(' ');
            i += LineStart;
            foreach (string xy in x)
            {
                richTextBox1.SelectedText = "<" + xy + "></" + xy + ">";
                i += 2 + xy.Length;
                this.richTextBox1.SelectionStart = i;
            }
            i = 0;


Nun funktioniert es endlich nach 3 Tagen und ich echt erleichtern.

Doch ein großes Lob geht besonders an user profile iconTh69 und user profile iconRalf Jansen. Ohne euch hätte ich das nicht geschafft. Ein großes Lob an euch :)

Mit freundlichen Grüßen, Csharp-programmierer
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Fr 20.11.15 21:57 
Es gibt nun doch noch ein kleines Problemchen :autsch:

Wenn ich nun einen Tab setze, wird zwar der Code geschrieben, aber direkt am Anfang der Zeile. Wie bekomme ich nun den erstellten Code genau an die Position, in der der Cursor gesetzt wurde (also z.B. wenn ich TAB gedrückt habe, den Code eingegeben habe, der Code wieder an dem TAB gesetzt wird)?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
        var line = this.richTextBox1.GetLineFromCharIndex(this.richTextBox1.SelectionStart);
            var LineStart = this.richTextBox1.GetFirstCharIndexFromLine(line);
            var s = richTextBox1.Lines[line];
            richTextBox1.Select(LineStart, s.Length);
            string y = this.richTextBox1.SelectedText;
            string yy = y.Trim(' ');
            string[] x = yy.Split(',');
            i = LineStart;
            foreach (string xy in x)
            {
                richTextBox1.SelectedText = "<" + xy + "></" + xy + ">";
                i += 2 + xy.Length;
                this.richTextBox1.SelectionStart = i;
            }
            i = 0;