Autor Beitrag
German_Chiller
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 21.02.10 14:52 
Ich versuche an das erste Zeichen der richTextBox zu kommen, das Zeichen einzufärben und dann wieder in die Box zu schreiben...

Der Code gibt mir aber immer nur ein "S" aus, egal was ich eingebe.
Was ist der Fehler?

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:
namespace HtmlEditor
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            String eingabe = " ";
            eingabe = richTextBox1.ToString();
            char[] zeichen = eingabe.ToCharArray();

            richTextBox1.SelectionColor = Color.Red;
            richTextBox1.Text = Convert.ToString(zeichen[0]);


        }
    }
}
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 21.02.10 15:16 
Du musst genau hinschauen, welche Eigenschaft und welche Methode für welchen Zweck geeignet ist. ToString ist eine Standardmethode, die für jedes Objekt vorhanden ist und unterschiedliche Werte liefert. Bei der RTB dürfte es immer der Text "System.Windows.Forms.RichTextBox" sein...

Du willst aber den nackten Text haben. Rate einmal, wie diese Eigenschaft lauten könnte. Das ist der erste Hauptfehler.

Weitere Fehler oder Ungereimtheiten:
ausblenden C#-Quelltext
1:
2:
            String eingabe = " ";
            eingabe = richTextBox1.ToString();

Es ist überflüssig, einen solchen Wert wie " " festzulegen, wenn er in der nächsten Zeile sowieso überschrieben wird (abgesehen davon, dass der Standardwert String.Empty lautet). Wenn die passende Eigenschaft sowieso ein String ist (das ist sie nämlich), kann sie auch direkt verwendet werden und muss nicht mit einer eigenen Variablen doppelt registriert werden.

Die Zeichen eines Strings sind sowieso eine Zeichenkette. Du kannst sofort per Index auf ein bestimmtes Zeichen zugreifen:
ausblenden C#-Quelltext
1:
char c = myRTB.Text[0];					

Das Hin und Her über ToCharArray und Convert.ToString ist völlig überflüssig.

Übrigens sind auch die Convert-Methoden fast immer überflüssig; dieses Konvertieren geht mit ToString (aber das nur der Vollständigkeit halber, das braucht man hier gar nicht):
ausblenden C#-Quelltext
1:
string newString = c.ToString();					


Der zweite Hauptfehler ist außerdem: Dein Verfahren schmeißt den gesamten Text weg und behält nur das erste (falsche) Zeichen. Wenn du dagegen die richtige Eigenschaft für den Text nimmst und SelectionStart=0 und SelectionLength=1 benutzt, bezieht sich die SelectionColor genau auf den richtigen Bereich; und der gesamte Text wird überhaupt nicht geändert.

Gruß Jürgen
German_Chiller Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 21.02.10 15:36 
Danke für die ausfühliche Hilfe...
Nach einigem ausprobieren, habe ich jetzt verstanden, was du gemeint hast^^
Die Hilfe war also nicht zu viel und nicht zu wenig :D
Hier das Beispiel, alle "l" einzufärben

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
String eingabe = richTextBox1.Text;
            for (int i = 0; i < eingabe.Length; i++)
            {
                if (eingabe[i] == 'l')
                {
                    richTextBox1.Select(i, 1);
                    richTextBox1.SelectionColor = Color.Red;
                }
                else
                {
                    richTextBox1.Select(i, 1);
                    richTextBox1.SelectionColor = Color.Black;
                }
            }


Jetzt werde ich mich an die richtige Aufgabe machen, den HTML-Editor zu schreiben, jedenfalls soweit ich komme^^
German_Chiller Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 22.02.10 20:21 
Gibt es eine Aktion, die sich ausführt, wenn man die Eingabetaste in der richTextBox drückt?

also in der form von:

ausblenden C#-Quelltext
1:
2:
3:
4:
private void ??EnterHit??(object sender, EventArgs e)
{
//Befehle
}
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 22.02.10 21:08 
Hallo,

da scheint zunächst der Standardhinweis angebracht: Schau selbst in der SDK-Doku/MSDN/Hilfe nach, welche Eigenschaften, Methoden, Ereignisse für eine bestimmte Klasse - hier die RichTextBox - angeboten werden.

Windows reagiert auf Ereignisse. "Taste" heißt auf Englisch "key"; also musst du schauen, inwieweit die Key-Ereignisse ausgewertet werden können. In der SDK-Doku gibt es schöne Beispiele dazu.

Hinweis: Du musst e.Handled ggf. auf true setzen, sonst wird das Enter als Zeilenumbruch in den Text eingefügt. Das ist übrigens ein Grund dafür, dass ich dringend davon abrate, auf Enter so zu reagieren, dass sich das außerhalb der RTB auswirkt.

Gruß Jürgen
German_Chiller Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 22.02.10 21:59 
msdn.microsoft.com/d...keypress(VS.80).aspx

das hier ist der passende abschnitt in der hilfe, aber das hiflt mir nicht weiter...
Das müsste meinem Wissenstand nach funktionieren, tut es aber nicht
ausblenden C#-Quelltext
1:
2:
3:
4:
private void richTextBox1_KeyPress(object sender, EventArgs e)
{
//Befehle
}


Btw, ich möchte, dass die Eingabetaste in der richTextBox bleibt...
und wie kann ich die Eingabetaste als gedrückte taste abfragen?
Es funktioniert, das habe ich schon in der Hilfe gelesen, nur wie stand nicht dabei
ausblenden C#-Quelltext
1:
2:
3:
4:
if ( e.KeyCode == "??")
{
//blablabla
}
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 22.02.10 22:12 
user profile iconGerman_Chiller hat folgendes geschrieben Zum zitierten Posting springen:
das hier ist der passende abschnitt in der hilfe, aber das hiflt mir nicht weiter...
Das müsste meinem Wissenstand nach funktionieren, tut es aber nicht

KeyPress arbeitet nicht mit EventArgs, sondern mit KeyPressEventArgs. Also wenn schon, dann solltest du richtig kopieren.

user profile iconGerman_Chiller hat folgendes geschrieben Zum zitierten Posting springen:
Btw, ich möchte, dass die Eingabetaste in der richTextBox bleibt...

Stand da oben nicht etwas von e.Handled? Ich wusste doch, dass diese Frage kommt, und habe sie schon vorab beantwortet.

user profile iconGerman_Chiller hat folgendes geschrieben Zum zitierten Posting springen:
und wie kann ich die Eingabetaste als gedrückte taste abfragen?
Es funktioniert, das habe ich schon in der Hilfe gelesen, nur wie stand nicht dabei
ausblenden C#-Quelltext
1:
2:
3:
4:
if ( e.KeyCode == "??")
{
//blablabla
}

Bei KeyPress wird nicht e.KeyCode geprüft, sondern e.KeyChar. (Frag mich nicht, warum das so unterschiedlich geregelt wurde; ich muss auch immer die Hilfe befragen. Aber dazu ist sie ja da.) Und im Beispiel dazu steht:
ausblenden C#-Quelltext
1:
        if (e.KeyChar == (char)Keys.Return)					

Mehr Informationen bietet dann die Auflistung der Keys.Enumeration.

Es ist in diesem Fall übrigens mehr oder weniger Geschmackssache, ob man mit KeyDown/Up oder KeyPress arbeitet. Aber bei bestimmten Tasten geht nur die eine, bei Tastenkombinationen nur die andere Variante.

Wie gesagt: einfach ein bisschen in der Hilfe blättern (und genau lesen und richtig kopieren), dann findet man die Lösung schnell selbst. Jürgen

PS. Die Frage hat eigentlich nichts mehr zu tun mit "Zeichen färben". Das wird jetzt schon sehr off-Topic.