2017-02-13 7 views
0

Ich habe eine statische Methode, die ich verwenden möchte, um die Console.BackgroundColor zu ändern, wenn es in der Testumgebung ausgeführt wird. Wenn ich nach dem Ändern der Farbe auf der Linie breche, wird immer noch auf Schwarz gesetzt.Konsolenfarbe Hintergrundfarbe ändert sich nicht

public static void LogError(string err) 
{ 
    if (IsRunningFromMspec) 
    { 
     Console.BackgroundColor = ConsoleColor.DarkRed; 
     Console.WriteLine(" &&&" + err); 
    } 
    else if (MyTracer.MyLevelSwitch.TraceError && !string.IsNullOrEmpty(err)) 
    { 
     Trace.TraceError(" &&& - " + err); 
    } 
} 

Antwort

4

Console.BackgroundColor nicht die Farbe des gesamten Konsolenfenster Hintergrund ändern. Es ändert nur die Hintergrundfarbe des Textes, den Sie schreiben werden nach Sie setzen diese Farbe.

So Ihre Ausgabe Console.WriteLine(" &&&" + err); wird nun mit einem DarkRed Hintergrund geschrieben werden:

enter image description here

Unfortunatly zur Zeit programmatisch die gesamte Konsolenfenster Farbe zu ändern, nicht so, wie ich weiß.

Als Ian H. wies in den Kommentaren aus, die ganze Konsole Fenster Hintergrund auf die gewünschte Farbe Anruf

Console.Clear(); 

, nachdem Sie die Farbe geändert einzustellen. Aber das wird natürlich alle Inhalte löschen, die Sie zuvor geschrieben haben und die Sie vielleicht nicht möchten.

+0

Um den gesamten Hintergrund zu malen, führen Sie 'Console.Clear();' nach dem Einstellen der Hintergrundfarbe aus. –

+0

@IanH. Ach richtig, schön, habe ich vergessen (ich glaube ich erinnere mich, dass ich es einmal wusste). Thx, ich füge es der Vollständigkeit halber hinzu. –

+0

Die Windows-APIs zum Aufrufen sind ['GetConsoleScreenBufferInfo'] (https://msdn.microsoft.com/en-us/library/ms683171), um das aktuelle' srWindow' für die Startkoordinate und die Anzahl der zu lesenden Zeichenzellen zu erhalten über ['ReadConsoleOutputAttribute'] (https://msdn.microsoft.com/en-us/library/ms684968). Ändern Sie die Hintergrundfarbe für jede Zelle und schreiben Sie die Attributdaten zurück über ['WriteConsoleOutputAttribute'] (https://msdn.microsoft.com/en-us/library/ms687407). – eryksun

Verwandte Themen