Hallo,
ich haben mal folgende Frage und hoffe das Ihr mir helfen könnt.
Ich habe eine MDI Anwendung und möchte das im Child der text ( Beispielsweise Quelltext) farbig angezeigt wird. Und zwar unterschiedlich.
Codemäßig habe ich im Entwicklerbuch nix dazu gefunden. Habt Ihr eine Idee oder einen Link ?
Danke
Unterschiedlich je Child?
Eine Color Eigenschaft im Child nach aussen führen, die beim set {..} die entsprechende Farbe an die Subcontrols (zb. Textbox) weitergibt und die du dann vom MDI Container aus ansprechen kannst tut's nicht?
hmmm Beispiel UltraEdit.
Dort werden Texte unterschiedlich in Farbe dargestellt. Genau das brauche ich auch.
meinst du syntax highlightning?
Viele Grüße
Alexander
YES SIR! Genau das meine ich 😜
yehha 😁
ich glaub der hauptmann hat das sogar mal programmiert .... mal schaun ob der sich in dem thread meldet (ich weiss net wies geht 😜 )
Viele Grüße
Alexander
Zieh dir vielleicht mal die Quellcodes von SharpDevelop, da ist sowas eingebaut ... ist aber jedenfalls einigermassen aufwändig, da du dazu den Text ja parsen musst ...
Im Buch C#.net-Entwicklerbuch steht auf Seite 299 wie man die Farben (Hintergrund/Vordergrund) für Steuerlemente ändert.
Hier mal für nen Button:
okButton.ForeColor = Color.AntiqueWhite
Dies kannst du dann ja selbst bestimmten, nach erkannte Schlüsselwörter wenn es sich um Quellcode handelt eingefärbt werden, ansonsten der default-Wert (oder so) benutzt wird.
Auf Seite 396 findest du zur Klasse SystemBrushes eine Übersicht von Eigenschaften und was diese Bewirken.
Ansonsten steht so eine Tabelle für Systemfarben auf Seite 391/392.
Code-Hacker
Antwort von Stefan:
Hi danke für die Info. Ich möchte aber keine Steuerelemente einfärben sonder text Highlighting in meinem MDI Child machen. Das heißt bestimmte Wörter im Child MDi sollen in einer betimmten farbe dargestellt werden :idea:
Gruss
ich glaub der hauptmann hat das sogar mal programmiert .... mal schaun ob der sich in dem thread meldet (ich weiss net wies geht 😜 )
"ich weiss net wies geht 😜 " LOL Du Nase 😉 😉 😜
Ich hoffe der schaut hier rein oder quatscht mich mal per ICQ 160027789 an 😉
aber ist so synatx highlightning net verdammt aufwändig? ich mein z.b. bei dreamweaver, da gibts das ja für jeden scheiss, asp, php, html, usw usw ... wenn da alle schlüsselwörter definieren musst...
Viele Grüße
Alexander
Da muss ich halt durch. Wenn ich der Coolste .NET Programmierer der Welt bleiben will :lol: dann muss ich das machen !
hehe dann will ich mal sehn 8)
mr. coolster c# programmierer der welt
Viele Grüße
Alexander
Original von alexander
hehe dann will ich mal sehn 8)
mr. coolster c# programmierer der welt
1. Frech in meinen Beitrag zu schreiben! 😉 Ist zwar nicht schlimm, imho dennoch besser das wenn du es machst, es deutlich, also farbig kennzeichnest und mit deinem Namen versehrst.
Code-Hacker
- Frech in meinen Beitrag zu schreiben! 😉 Ist zwar nicht schlimm, imho dennoch besser das wenn du es machst, es deutlich, also farbig kennzeichnest und mit deinem Namen versehrst.
Sorry wollte deinen text nicht zerstören 😉 Vielleicht weiss der Hauptmann ja ne Lösung. Wenn nicht dann lass ich das erstmal links liegen. Ich muss ja schließlich noch die Welt retten.
Syntax-Highlighting ist gar nicht so schwierig wie es klingt. Ich hätte jedenfalls ne Idee wie es machbar sein müsste:
Man konstruiert sich reguläre Ausdrücke, die Schlüsselwörter, Zeichenketten, Zahlen, Kommentare usw. finden können. Die Ausdrücke kombiniert man als "benannte Gruppen" über das Alternierungssymbol "|" zu einem einzigen großen Ausdruck.
Lässt man diesen Ausdruck über einen Text suchen, findet er die einzufärbenden Textbausteine, samt Position und Länge im Text. An der benannten Gruppe erkennt man die Art des gefundenen Textes.
Die Textbausteine fügt man in eine RichTextBox ein. Zum Formatieren benutzt man die RichtTextBox-API oder man fügt die RTF-Formatierungscodes selbst ein. Die nicht hervorzuhebenen Textteile dürfen natürlich nicht vergessen werden.
Fertig ist der Text mit Syntaxhervorhebungen.
Gruß
Pulpapex
Hallo und danke,
das hört sich gut an aber ich glaube das krieg ich nicht ganz auf die reihe. Im Prinzip verstehe ich was Du meinst. Wie ich das umsetzen soll weiss ich aber noch nicht so genau 🙁
Hallo Stefan,
momentan versuche ich auch ein Syntaxhighlight zu realisieren. Geht noch nicht ganz.
Hier kannst du mal durchschaun, vielleicht hilft dir dies
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Text.RegularExpressions;
using System.Text;
namespace WindowsApplication1
{
/// <summary>
/// Zusammendfassende Beschreibung für Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.Button button1;
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Erforderlich für die Windows Form-Designerunterstützung
//
InitializeComponent();
//
// TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu
//
}
/// <summary>
/// Die verwendeten Ressourcen bereinigen.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// richTextBox1
//
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(592, 344);
this.richTextBox1.TabIndex = 0;
this.richTextBox1.Text = "richTextBox1";
//
// button1
//
this.button1.Location = new System.Drawing.Point(264, 352);
this.button1.Name = "button1";
this.button1.TabIndex = 1;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(584, 526);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.button1,
this.richTextBox1});
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e)
{
richTextBox1.LoadFile(@"C:\test.cs",RichTextBoxStreamType.PlainText);
ParseText(richTextBox1.Text);
}
private void ParseText(string text)
{
StringBuilder sb = new StringBuilder(text);
sb.Replace("\r","");
Regex search = new Regex("(?<type>int");
Match m;
for(m = search.Match(sb.ToString()); m.Success; m =
m.NextMatch())
{
richTextBox1.Select(m.Index,m.Length);
richTextBox1.SelectionColor = Color.Red;
}
}
}
}
Das Problem ist jetzt einfach nur noch, dass wenn das int in Print steht auch makiert wird. Hat jemand ne idee wie ich dies verhindern kann???
du könntest die regex so erweitern, dass zuvor und danach kein buchstabe/zahl/_ sein darf
Hallo cdr,
dies ist mir soweit schon klar. Das Problem ist mit den regexdingern kenne ich mich gar nicht aus. Meistens ist es so das bei den Befehlen der type entweder eine klammer oder ein leerzeiche von und hinter sich hat...
Wie müsste ich den regexbefehl ändern?
cdr's Vorschlag würde so aussehen:
[^0-9a-zA-ZäöüÄÖÜß_](?<primtype>int|float|double|char)[^0-9a-zA-ZäöüÄÖÜß_]
In eckigen Klammern steht die Menge der Zeichen, die nicht direkt vor oder nach einem primitiven Typ auftreten dürfen. Das '^'-Zeichen bedeutet hierbei das "nicht".
Bemerkung: mit den vordefinierten Zeichenklassen \W (keine Buchstaben) und \D (keine Ziffern) müsste es eigentlich auch funktionieren. Ich hab es aber nicht hinbekommen. Weiss nicht woran es liegt.
Gruß
Pulpapex
@Pulpapex
Werde es mal versuchen. Vielen dank.
Weißt du eventuell wo man hierzu gute erläuterungen im internet findet??? Wenn möglich sogar in Deutsch???
nicht im internet, aber sehr zu empfehlen:
ISBN 3-930673-62-2
Ich hab mir nur die Msdn-Hilfe durchgelesen. Da steht alles drin. Am Anfang ist die Beschreibung etwas undurchsichtig, entweder durch die Ausdrucksweise oder durch die Übersetzung. Nach ner Weile kapiert man es aber.
Ahoi Ihr Pappnasen 😁
war ne Zeit lang nicht im Forum und habe nun gesehen das auf meine Frage viele Antworten gekommen sind. Herzu vielen Dank. Ich habe mich bisher nicht mehr mit SAyntax Highlighting beschäftigt und werde mir mal die Antworten studieren und dann wieder das grosse Fummeln- und Haare raufen wieder beginnen 😉
Ich melde mich wieder..
BTW: ISBN 3-930673-62-2 = Reguläre Ausdrücke ??
http://www.stemosoft-elektronik.de