2012-03-29 20 views
0

Okay, so ist dies ein Übertrag auf meiner letzte Frage, aber ich habe den Code:Ändern String Farbe

private void btnTrans_Click(object sender, EventArgs e)  
    { 
     var abrvStr = inputBx.Text; 

     foreach (var kvp in d) 

     { 
      abrvStr = abrvStr.Replace(kvp.Key, kvp.Value); 

     } 

     outputBx.Text = abrvStr; 


    } 

Im Grunde ist es Teil eines Wörterbuch-Programms, so dass, wenn Sie eine Textzeile eingeben in Textfeld 1 erscheint in Textfeld 2 mit einem Wort ersetzt von Textfeld 1 im Wörterbuch. Also, wenn schwarz, weiß ist im Wörterbuch und ich betrete Die Wand ist schwarz. Die Wand ist weiß und wird in Textfeld 2 angezeigt. Alles ist gut.

Gerade jetzt der schwierige Teil, wie würde ich das ändern, damit ich das geänderte Wort in Textfeld 2 als die Farbe rot haben kann. Also in meinem obigen Beispiel ist die Wand weiß. Weiß wäre in der Ausgabezeile des Textes rot.

Hinweis, ich bin mit Rich

C# Sprache!

+0

Welche Sprache C#/Java/??? ? – OmegaMan

+0

Doh! C# Tut mir leid, ich werde es bearbeiten – user1300788

Antwort

2

aufbauen Oliver Jacot-Descombes answer formatieren:

private void btnTrans_Click(object sender, EventArgs e)  
{ 
    var abrvStr = inputBx.Text; 

    foreach (var kvp in d) 

    {    
     abrvStr = abrvStr.Replace(kvp.Key, kvp.Value); 
     int start = abrvStr.IndexOf(kvp.Value); 
     if(start >= 0) 
     { 
      richTextBox1.Text = abrvStr; 
      richTextBox1.Select(start, kvp.Value.Length); 
      richTextBox1.SelectionColor = Color.Red; 
     } 
    } 
} 

Sie würden verwenden, um eine switch-Anweisung auf den Wert des Wörterbuchs zu erhalten, welche Farbe Sie ändern möchten, die Auswahl. Sie müssen das ändern, um die Werte in Ihrem Wörterbuch sowie die gewünschten Farben anzupassen.

+0

Führt einen Fehler aus "Wert von '-1' ist nicht gültig für 'Start'" – user1300788

+0

@ user1300788 hat es behoben. -1 bedeutet, dass der Wert nicht in der Zeichenfolge enthalten ist. Wir müssen nur eine Überprüfung durchführen, um sicherzustellen, dass der Wert existiert, bevor wir irgendetwas tun – Jetti

+0

leider funktioniert das nicht. Es läuft gut, aber ändert nicht das Wort rot – user1300788

0

Fügen Sie der Eigenschaft Tag der Textbox einen Verweis auf das KVP im Wörterbuch hinzu. Wenn der Benutzer die Farbe ändert, rufen Sie den KVP über die Eigenschaft Tag ab und ändern Sie den Wert im KVP. Ich biete Einblick in die Tag-Eigenschaft in meinem Blog C # Winforms and the Hidden Association Tag. WPF/Silverlight verwenden auch die Tag-Eigenschaft auf Kontrollen sowie ..

--- bearbeiten pro Benutzeranforderung ---

Ich bin nicht sicher, warum Sie ein Wörterbuch aufzuzählen brauchen. Der ganze Sinn eines Wörterbuchs ist es, schnell den Schlüssel zu bekommen. Mein Beispiel verwendet das und macht die for-Schleife nicht.

... Die Initialisierung Lage ....

var myDictionary = new Dictionary<string, Tuple<string, System.Drawing.Color>>() 
{ 
     { "Black", new Tuple<string,System.Drawing.Color>("White", Color.Green) }, 
     { "White", new Tuple<string,System.Drawing.Color>("Black", Color.Red) } 

}; 

... (später im Code) ...

private void btnTrans_Click (object sender, EventArgs e)
{

var key = inputBx.Text; // Let us say "White" 

if (myDictionary.ContainsKey(key)) 
{ 

    var targetColor = myDictionary[key]; // Just get the value 

    outputBx.Select(0, targetColor.Item1.Length); 
    outputBx.SelectionColor = targetColor.Item2; 
    outputBx.Text = targetColor.Item1; 
} 
else 
{ 
    outputBx.Text = "Unknown"; 
} 

}

überprüfen meinem Blog articl out e auf Wörterbücher für weitere Informationen C# Dictionary Tricks

+0

Der Benutzer ändert die Farbe nicht. Ich meinte damit, dass es das geänderte Wort in Textfeld 2 in einer anderen Farbe zeigt als der Rest – user1300788

+0

Verstanden. Haben Sie den KVP-Wert als Tuple anstatt nur text. Dann, wenn das Textfeld geladen ist, erhalten Sie item1 für den Text und item2 für die Zielfarbe. – OmegaMan

+0

jede Chance, Sie könnten mir ein Beispiel in Ihrer Antwort geben, wie dieser Code aussehen würde. Ich bin nicht sicher, wo ich es über meinen Code ändern würde – user1300788

2

Sie können die SelectionColor Eigenschaft der RichTextBox verwenden. Beginnen Sie, indem Sie das Wort auswählen, die Sie

string word = "white"; 
int start = richTextBox1.Find(word); 
if (start >= 0) { 
    richTextBox1.Select(start, word.Length); 
    richTextBox1.SelectionColor = Color.Red; 
} 
+0

Nützliches Danke! Ich muss mich entschuldigen, weil ich ein Anfänger bin. Wo hast du angefangen, Länge. Woran würde ich diese ändern? – user1300788

+0

'start' ist die Startposition Ihres Wortes. Länge ist seine Länge. Bitte, siehe meine aktualisierte Antwort. –