2017-02-13 2 views
0

J'ai une méthode statique que je veux utiliser pour changer le Console.BackgroundColor si elle est en cours d'exécution dans l'environnement de test. Lorsque je casse sur la ligne après que la couleur est modifiée, elle est toujours définie sur Noir.Console couleur de fond couleur Non Changement

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); 
    } 
} 

Répondre

4

Console.BackgroundColor ne modifie pas la couleur d'arrière-plan de toute la fenêtre de la console. Il ne change la couleur d'arrière-plan du texte que vous écrirez après vous définissez cette couleur.

Ainsi, votre sortie Console.WriteLine(" &&&" + err); va maintenant être écrit avec un fond DarkRed:

enter image description here

Malheureusement je ne sais pas une façon de changer toute la programmation couleur de la fenêtre de la console pour le moment.

Comme Ian H. a souligné dans les commentaires, pour définir l'ensemble de l'arrière-plan de la fenêtre de la console à l'appel de la couleur désirée

Console.Clear(); 

après avoir changé la couleur. Mais bien sûr, cela supprimera tout le contenu que vous avez précédemment écrit, ce que vous ne voulez peut-être pas.

+0

Peindre l'arrière-plan entier, 'execute Console.Clear();' après avoir défini la couleur d'arrière-plan. –

+0

@IanH. ah bon, gentil, oublié à ce sujet (je pense que je me souviens je le savais une fois). Merci, je vais l'ajouter pour l'exhaustivité. –

+0

Les API Windows pour appeler sont [ 'GetConsoleScreenBufferInfo'] (https://msdn.microsoft.com/en-us/library/ms683171) pour obtenir le courant' srWindow', pour le début de coordonnées et le nombre de cellules de caractères à lire via [ 'ReadConsoleOutputAttribute'] (https://msdn.microsoft.com/en-us/library/ms684968). Modifier la couleur d'arrière-plan pour chaque cellule, et écrivent les données d'attribut de retour via [ 'WriteConsoleOutputAttribute'] (https://msdn.microsoft.com/en-us/library/ms687407). – eryksun