Laden...

ICSharpCode.TextEditor kennt jemand ein wenig davon?

Erstellt von Robertico vor 16 Jahren Letzter Beitrag vor 16 Jahren 9.395 Views
R
Robertico Themenstarter:in
344 Beiträge seit 2006
vor 16 Jahren
ICSharpCode.TextEditor kennt jemand ein wenig davon?

Hi Alle,

Da ich zur zeit viel in FTP arbeite gehen mir die ewigen Aktionen von einem Programm zum anderen auf den Geist.

An einem FTP-Client habe ich ja in Projekte schon mal angefangen.
Den will ich dazu benutzen um ein feines Werkzeug zu machen. Und zwar einen Editor, in dem man arbeiten kann und das Produkt per Knopfdruck auf den Server laden.

Das funzt auch.

Als Texteditor habe ich obigen genommen.

Undo und Redo habe ich leicht gefunden.

Aber wie mache ich:

-- copy
-- past
-- delete
-- insert
...

englisch kann ich leider nur leidlich.

Wenn mir jemand hilft, so wäre das für alle nützlich. =)

Gruß Robert

PS.

Wenn jemand, der diesen Editor kennt ein kurzes Tutorial schreiben würde, so wäre das wunderbar. 😁

R
Robertico Themenstarter:in
344 Beiträge seit 2006
vor 16 Jahren

Oder,

Man könnte diesen Beitrag dazu benutzen eine Sammlung von Wissen über den Editor anzulegen.

Wenn jemand etwas zu der Bedienung weiss, egal was, einfach ungefragt hier herein schreiben.

Wenn genug zusammen ist, bin ich gerne bereit ein Tutorial zu schreiben.

Dass ich das kann, kann ein Klick auf mein Bild unten zeigen.

Gruß Robert

3.825 Beiträge seit 2006
vor 16 Jahren


// copy TextBox
SendKeys.Send("^C");

// copy RtfBox
RichTextBox1.Copy();


Also nicht so schwierig !

Beim ICSharpCode.TextEditor weiss ich es nicht, wird aber sicher ähnlich sein.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

R
Robertico Themenstarter:in
344 Beiträge seit 2006
vor 16 Jahren

Hallo Bernd,

habe beides Versucht

Sendkeys.Send("^C");

gibt es zwar, aber wohin sendet er das? Jedenfalls nicht an den Editor.
Verbesserung; Habe mal ohne ^gemacht, dann wird es gesendet. Aber klar, nur das C. X(

Habe auch vorher den Focus gegeben.

RichTextBox1.Copy(); gibt es nicht in: ICSharpCode.TextEditor

Evtl. meinst du etwas anderes. €dit: sagtest du ja. Nur bevor ich hier frage suche ich richtig gut. Nichts gefunden.

Gruß Robert

J
3.331 Beiträge seit 2006
vor 16 Jahren

Hallo Robert,

versuch einmal, unter #D nachzufragen: Es gibt dort auch ein deutschsprachiges Unterforum und mehrere deutsche Entwickler.

Gruß Jürgen

2.921 Beiträge seit 2005
vor 16 Jahren

Hier werden viele Komponenten von #Develop beschrieben, sind ja auch schließlich die (Haupt-)Entwickler des Programms,
Code-Beispiele werden Dir wohl weiterhelfen auch wenn Deine Englischkennntnisse bisher nur "leidlich" sind:

http://www.apress.com/free/content/Dissecting_A_CSharp_Application.pdf

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

R
Robertico Themenstarter:in
344 Beiträge seit 2006
vor 16 Jahren

Hallo juetho, hallo dr4g0n76,

Die PDF ist sehr ausführlich. Hatte auf anhieb auch schon etwas gefunden.

Document.Insert(Document.Caret.Offset, str);

Nur dieses Caret kenn er nicht.

Dann habe ich mich jetzt auf euer Anraten bei dem Forum angemeldet und die gleiche Frage gestellt. Hoffe, dass mir niemand böse ist.

Ich denke nur, das ist ein so schönes Werk, der Editor, da müsste doch irgendwo stehen wie man ihn benutzen kann.

Warten wirs ab. Bin aber trotzdem für jeden Hinweis dankbar.

Gruß Robert

2.921 Beiträge seit 2005
vor 16 Jahren

@Robertico: Vielleicht hilft dir ja auch das ein wenig weiter:

http://community.sharpdevelop.net/search/SearchResults.aspx?q=texteditor

?!

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

R
Robertico Themenstarter:in
344 Beiträge seit 2006
vor 16 Jahren

Danke dr4g0n76,

schon der zweite Beitrag hat mir eine Richtung gezeigt.

Z.B: insert

TextEditorControl rtb = new TextEditorControl();
TextAreaControl tac = rtb.ActiveTextAreaControl;
rtb.Document.Insert(tac.TextArea.Caret.Offset, Clipboard.GetText());
        public void Cut()
        {
            tac.TextArea.SelectionManager.RemoveSelectedText();
        }

Die Sachen sind also weit unten versteckt. Denke jetzt komme ich weiter.

Nochmal Danke

Robert

R
Robertico Themenstarter:in
344 Beiträge seit 2006
vor 16 Jahren

Hallo alle,

Habe jetzt eine Version bereit gestellt, mit der ich schon gut arbeiten kann.

Unter Projekte zu finden.

Es ist für mich erfrischend, wenn ich eine PHP oder HTML lade, etwas ändere, dann auf speichern drücke und es mir im selben Programm im Web-Browser ansehen kann was ich da farbriziert habe.

Leider, an den Downloads sehe ich es, ist es wohl nicht so gefragt.

Ich mache es aber für mich, will euch nur, wie sagt man so schön, partizipieren lassen. Bin schon so oft geholfen worden.

Hab ich das jetzt richtig geschrieben? X( ist doch vielleicht besser Anteil nehmen lassen???

Gruß Robert

PS: Ihr habt mir alle geholfen, ich danke dafür. >Und wenn es nur dazu da war mir die Suchfunktion in einem anderen Forum zu zeigen.
Manchmal hat man ein Brett vor dem Kopf.

Danke euch

U
105 Beiträge seit 2004
vor 16 Jahren

Hallo Robertico,

ich habe mich mal ein wenig mit dem Editor beschäftigt. Ich kann dir ein paar Tipps geben:

Zum Bearbeiten:
Um Tätigkeiten wie Ausschneiden, Kopieren, Einfügen usw. durchzuführen, brauchst du den TextAreaClipboardHandler.

Hier mal ein bisschen Beispiel-Code:


TextAreaClipboardHandler ch = fp.TextEditor.ActiveTextAreaControl.TextArea.ClipboardHandler;

// Prüfen, ob Kopieren möglich ist
ch.EnableCopy;
// Prüfen, ob Ausschneiden möglich ist
ch.EnableCut;
// Prüfen, ob Löschen möglich ist
ch.EnableDelete;
// Prüfen, ob Einfügen möglich ist
ch.EnablePaste;
// Prüfen, ob Alles markieren möglich ist
ch.EnableSelectAll;

Die Ausführung erfolgt dann über die einzelnen Funktionen:


TextAreaClipboardHandler ch = fp.TextEditor.ActiveTextAreaControl.TextArea.ClipboardHandler;

ch.Copy(sender, e);
ch.Cut(sender, e);
ch.Delete(sender, e);
ch.Paste(sender, e);
ch.SelectAll(sender, e);

Die Definition der Methoden will einen Sender und EventArgs.

Um zu prüfen, ob man Wiederholen oder Rückgängig machen kann, kannst du folgenden Code verwenden:


// Rückgängig verfügbar?
fp.TextEditor.EnableUndo;

// Wiederholen verfügbar?
fp.TextEditor.EnableRedo;

Ausführen kannst du die Funktion dann mit folgendem Code:


TextEditor.Undo();
TextEditor.Redo();

Zum Highlighting:
Du kannst entweder den Editor das Highlighting übernehmen lassen:


string p = "Pfad zur Datei";
TextEditor.Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategyForFile(p);

oder du machst es selber, über die entsprechenden xshd-Dateien, die dir vorliegen (das sind die Syntaxdefinitionen). So kannst du die xshd-Dateien auch in einer Funktionen erstellen und deine eigenes Highlighting erstellen. Hier am Beispiel von SQL:


string dir = "Verzeichnis in dem die *-mode.xshd Dateien liegen";
FileSyntaxModeProvider fsmProvider;
if (Directory.Exists(dir))
{
fsmProvider = new FileSyntaxModeProvider(dir);
HighlightingManager.Manager.AddSyntaxModeFileProvider(fsmProvider);
txtSQL.SetHighlighting("SQL";);
}

Der obere Code versucht die Definition von SQL aus dem entsprechendem Verzeichnis zu laden. Dort muss sich eine xshd-Datei mit der entsprechenden Definition befinden.

Zum Folding:
Um Folding zu verwenden musst du dir eine Methode schreiben, dir dir die FoldMarker aktualisiert:


private void UpdateFoldMarkers()
{
List<FoldMarker> foldMarkerList = new List<FoldMarker>;();
Stack<int> st = new Stack<int>;();
for (int i = 0; i < TextEditor.Document.TextLength; i++)
{
char ch = TextEditor.Document.GetCharAt(i);

if (ch == '{')
{
st.Push(i); // remember position of '{'
}
else if (ch == '}' && st.Count > 0)
{
int start = st.Pop(); // get position of matching '{'
int length = i - start + 1; // calculate distance between '{' and '}'
foldMarkerList.Add(new FoldMarker(TextEditor.Document, start, length, "...", false));
}
}
TextEditor.Document.FoldingManager.UpdateFoldings(foldMarkerList);
}

Die Update-Funktion kannst du dann zum Beispiel beim Document-Changed aufrufen, oder über einen Timer aller 2 Sekunden oder so.

Wenn du die Funktion noch ein wenig anpasst, kannst du auch andere Dinge zusammenfalten lassen.

Falls du Klammern oder so etwas automatisch beim Tippen eingeben willst, kannst du den folgenden Code verwenden:


void TextArea_KeyPress(object sender, KeyPressEventArgs e)
{
int caretPosition = tac.Caret.Offset;

switch (e.KeyChar)
{
case '[': tac.Document.Insert(caretPosition, "]";);
break;
case '{': tac.Document.Insert(caretPosition, "}";);
break;
case '\"': tac.Document.Insert(caretPosition, "\"";);
break;
case '\'': tac.Document.Insert(caretPosition, "\'";);
break;
case '(': tac.Document.Insert(caretPosition, ";)";);
break;
}

tac.TextArea.Caret.Position.Offset(1, 2);
}

tac ist das ActiveTextAreaControl. Ich habe das mal in einer Variable zwischengespeichert, da ich das öfters brauche. An dieser Stelle könntest du auch noch prüfen, ob das nächste Zeichen bereits ein schließendes Tag ist (außerdem muss die Anzahl der Tags stimmen) und dann nicht einfügen, wie es bspw. das Visual Studio macht.

Den Cursor-Modus erhälst du wie folgt:


tac.Caret.CaretMode;
// mögliche Varianten wären CaretMode.OverwriteMode und CaretMode.InsertMode

Laden und Speichern von Dateien:


string path = "Pfad zur Datei";
TextEditor.LoadFile(path);
TextEditor.SaveFile(path);

Ich hoffe ich konnte dir erstmal helfen.

Mit freundlichen Grüßen
Tobias H.

R
Robertico Themenstarter:in
344 Beiträge seit 2006
vor 16 Jahren

WOW Tobias, (UnrealNemesiS)

das ist ja schon fast ein Tutorial.

Habe mich selbst schon ein wenig durchgekämpft, aber mit deinen Angaben wird der Nebel lichter.

Vielen Dank

Robert

U
105 Beiträge seit 2004
vor 16 Jahren

Ich habe in meinem Projekt noch ein Beispiel für CodeCompletion (es ist aber auch eins im SharpDevelop-Source enthalten). Ich werde das mal aufbereiten und dann hier rein stellen.

F
86 Beiträge seit 2007
vor 16 Jahren

Hi ihr,

also ich wäre überaus glücklich, wenn mir jemand mal das mit den Lesezeichen (Bookmarks) erklären könnte.

Ich hab es hinbekommen, diese Bookmarks zu zeichnen usw. Aber beim scrollen muss ich sie z.B. immer neu zeichen, das sieht dann nicht so gut aus. Irgendwie muss man sie doch fixieren können??? Ich hab den Bookmarkmanager noch nicht so kapiert. Wäre toll wenn mir da jemand helfen kann.

Bei Fragen zu den anderen Themen kann ich bestimmt weiter helfen. Hab mich jetzt mit dem Texteditor nen halbes Jahr rumgeschlagen und vieles in mühseligen Ausprobierereien hinbekommen!

F
86 Beiträge seit 2007
vor 16 Jahren