Как сделать вывод смайликов в текстовом поле RichEdit

285
15 марта 2017, 15:42

Добрый день. Хочу сделать программу, которая бы текстовые сокращения вида ":),:(" и так далее по нажатию по кнопке на форме переводила в смайлики. На саму форму для принятия входящих данных я добавил обычный textbox а вот для вывода уже самих смайликов у меня компонент RichTextBox. Набор смайликов у меня статический в том плане, что это просто картинки формата png. Скажу сразу, я уже пытался найти подобную информацию и нашел. Inserting Smiles

Но я не совсем понимаю, в какую часть кода, что помещать. Да и у меня немного другие требования. Именно после клика по кнопке, что бы проводилась подобная замена и помещалась в RichEditBox.

Answer 1

Добрый вечер, на самом деле в том примере, что вы оставили ссылкой имеется весь необходимый код для реализации вашей цели. Прочитав ваши требования я составил небольшую форму

После взяв исходный код из примера немного его подправил и получил необходимый результат. Логика здесь такова: весь текст из textBox1 перенёс в richTextBox1, далее уже в самом richTextBox1 производится замена символов на картинки(смайлы), так же можно очистить textBox1, но это на ваше усмотрение.

Надеюсь это удовлетворит ваши требования.Весь код оставлю ниже. Задавай вопросы, постараюсь ответить.

private void add_smileys(TextBox tb,RichTextBox rtb)
    {
        var smileys = new Dictionary<string, Image>()
            {
                { @":)", Resources.in_smile },
                { @">:(", Resources.in_angry },
            };
        //Изменения здесь. Очищаем поле richTextBox1 перед его использованием
        richTextBox1.Text = null;
        //Вставляем текст из textBox1 в richTextBox1
        rtb.Text = tb.Text;
        foreach (var smiley in smileys)
        {
            add_smiley(rtb, smiley.Key, smiley.Value);
        }
    }
    private void add_smiley(RichTextBox rtb, string token, Image smiley)
    {
        while (true)
        {
            var selectionStart = rtb.Find(token, RichTextBoxFinds.WholeWord);
            if (selectionStart < 0) break;
            try
            {
                rtb.SelectionStart = selectionStart;
                rtb.SelectionLength = token.Length;
                Clipboard.SetImage(smiley);
                rtb.Paste();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                break;
            }
        }
    }
private void button1_Click(object sender, EventArgs e)
    {
        add_smileys(textBox1,richTextBox1);
    }
READ ALSO
Сжатие Deflate(GZIP)

Сжатие Deflate(GZIP)

Информация доступна крупицами, а вопрос большойТак как не силён в английском - http://www

340
Готов ли ASP.NET Core MVC для продакшена?

Готов ли ASP.NET Core MVC для продакшена?

Здравствуйте, вопрос к тем, кто уже работал с платформой ASPNET Core MVC

395