2009-04-10 7 views
2

Comment faire clignoter le texte dans la console en utilisant C#?Texte clignotant en C#

+1

Légèrement sans rapport: c'est sûrement un cauchemar d'utilisabilité. Je déconseillerais fortement. –

+2

D'accord. Ne fais pas ça, ça fait pleurer les gens. –

Répondre

5

personne-b était sur la bonne voie, mais leur code a besoin de quelques changements:

static void Main() 
    { 
     string txt = "Hello, world!"; 
     while (true) 
     { 
      WriteBlinkingText(txt, 500, true); 
      WriteBlinkingText(txt, 500, false); 
     } 
    } 

    private static void WriteBlinkingText(string text, int delay, bool visible) 
    { 
     if (visible) 
      Console.Write(text); 
     else 
      for (int i = 0; i < text.Length; i++) 
       Console.Write(" "); 
     Console.CursorLeft -= text.Length; 
     System.Threading.Thread.Sleep(delay); 
    } 

EDIT: Refonte un peu le code

+0

Tah! J'étais un peu pressé plus tôt, merci pour le refactoring. Je pensais avoir un bool bien visible mais j'ai décidé de trouver une solution rapide qui pourrait ne pas fonctionner. Quoi qu'il en soit, +1 de moi. –

+0

np :-) Le problème principal était que vous deviez appeler sleep et ajuster le curseur après avoir écrit les deux fois, sinon il sera toujours visible ou toujours caché. –

+0

Merci Matthew et person-b, ça marche maintenant :) – nikky

0
string txt = "Hello, world!"; 
while (doingSomething) 
{ 
    Console.Write(txt); 
    System.Threading.Thread.Sleep(20); 
    Console.CursorLeft -= txt.Length; 
    for (int i = 0; i < txt.Length; i++) 
    Console.Write(" "); 
} 

ce code ne fait pas clignoter si

+0

J'ai répondu dans ma réponse originale. –

0

Il n'y a pas un soutien direct, vous devez remplacer le texte avec des espaces (ou en différentes couleurs) sur la base d'une minuterie.

0

J'amélioré le code de Matthew un peu en utilisant \r et certains utilisation de fantaisie String:

static void Main() 
{ 
    string txt = "Hello, world!"; 
    WriteBlinkingText(txt, 500); 
} 

private static void WriteBlinkingText(string text, int delay) 
{ 
    bool visible = true; 
    while (true) 
    { 
     Console.Write("\r" + (visible ? text : new String(' ', text.Length))); 
     System.Threading.Thread.Sleep(delay); 
     visible = !visible; 
    } 
} 

Je pense aussi que le WriteBlinkingText méthode doit être autonome, de sorte que la boucle est à l'intérieur, mais qui est juste une question de goût personnel, je pense :)

0
private void timer1_Tick(object sender, EventArgs e)//This might work better for you :) 
    { 
     Random rand = new Random(); 
     for (int i = 0; i < 255; i++) 
     { 
      int A = rand.Next(i); 
      int R = rand.Next(i); 
      int G = rand.Next(i); 
      int B = rand.Next(i); 
      label2.ForeColor = Color.FromArgb(A, R, G, B); 
     } 
    } 
1

Pour ce faire, vous devrez utiliser:

console.clear

qui effacera toutes les informations dans la console, mais vous permettra de simuler un texte clignotant, en faisant le code suivant, vous pouvez le faire: (Ceci est en VB mais son facile à traduire)

Dim Flash As Integer 
Flash = 0 
While Flash < 100 (Any number can be put here for duration) 
Flash = Flash + 1 
console.Backgroundcolor = consolecolor.Black 
console.clear 
system.threading.thread.sleep(25) 
console.Backgroundcolor = consolecolor.White 
console.clear 
system.threading.thread.sleep(25) 
End While 

Et cela donnerait un écran clignotant par exemple, pour le texte clignote régler simplement:

Dim FlashWord As Integer 
FlashWord = 0 
While FlashWord < 100 (Any number can be put here for duration) 
FlashWord = FlashWord + 1 
console.Foregroundcolor = consolecolor.Black 
console.clear 
Console.Writeline("Hello World") 
system.threading.thread.sleep(25) 
console.Foregroundcolor = consolecolor.White 
console.clear 
Console.Writeline("Hello World") 
system.threading.thread.sleep(25) 
End While 

Et cela simulent « clignote », le seul inconvénient est que vous perdez vos informations précédente à l'écran, mais rien d'autre, et pour un effet c'est plutôt bien!

Questions connexes