Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Плавный вывод текста (хотя бы побуквенный) C#


Автор: Santa12 26.3.2011, 01:27
Уважаемые!

Помажите с таким вопросом:
C#
Есть некая ммм... назовем ее - программа. Выводит некоторый текст из файла. Хочется сделать вывод красивым, ибо программа исключительно лично-развлекательная. Хочется плавный вывод. Буква за буквой. В консоль такое вывести не проблема, а вот как можно сделать в лейбл? И возможно ли? Вариант добавления очередной буквы, и обновления лейбла - не кажется удачным. Шарп я только-только начал учить, поэтому вопрос может быть глупым, за что пардону просим )
Как вариант, если других не будет, остановился на варианте с webBrowser и ява-скиптом, выводящим текст побуквенно. Но это не комильфо. Может кто направит в нужном направлении?
Сразу же и еще вопрос: возможно ли использование шрифта, не установленного на компьютере, где выполняется программка? Если да - то как, в общих чертах?
Заранее спасибо за любые подсказки.

Автор: Fitc 26.3.2011, 20:12
Используй Thread.Sleep(..).Если надобно, чтобы интерфейс не зависал, то используй BackgroundWorker

Автор: Santa12 26.3.2011, 21:37
Наверное, я плохо сформулировал свои мысли. Проблема не в том, как сделать паузу. Проблема в том, что я не могу в richtextbox, Label, webbrouser - выводить по одному символу. Т.е. или сразу строку, или только последний символ выводится (в зависимости, что вывожу: string или char)...


Код

         for (int i = 0; i < mas.Length; i++)
            {
               richTextBox1.Text = mas[i] +"\n";
            }


В данном случае, это себя не оправдывает.

Автор: Abbath1349 26.3.2011, 21:59
Попробуй использовать таймер. И выводи Label.Text+=mas[i];

Автор: Santa12 26.3.2011, 22:13
Цитата(Abbath1349 @  26.3.2011,  21:59 Найти цитируемый пост)
Попробуй использовать таймер. И выводи Label.Text+=mas[i];


Так и делаю. Но думаю я дурак. 

Код

            for (int i = 0; i < mas.Length; i++)
            {
                richTextBox1.Text += mas[i] +"\n";
                label1.Text += mas[i];
                Thread.Sleep(200);
            }


Получаю паузу, а потом все строки (символы) массива, одним махом. Что у меня не так с руками?

Автор: Abbath1349 27.3.2011, 05:53
Код

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            timer1.Interval = 250;
        }

        char[] text = "Вывожу текст".ToCharArray();
        int i = 0;

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                label1.Text += text[i];
            }
            catch(IndexOutOfRangeException)
            {
                label1.Text = "";
                i = -1;
            } 
            i++;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (timer1.Enabled)
                timer1.Enabled = false;
            else
                timer1.Enabled = true;
        }   
    }


Может и не лучший способ,но работает )))

Автор: Santa12 27.3.2011, 11:35
Цитата(Abbath1349 @  27.3.2011,  05:53 Найти цитируемый пост)
Может и не лучший способ,но работает )))



Блин... мне жутко стыдно. Особенно стыдно от того, что пытался такой вариант, но компилятор ругался на "+=". И я неправильно разобрался с ошибкой (((( Посыпаю голову пеплом, и от всей души благодарю! К сожалению, не могу поставить плюс - постов не хватает (((

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)