Как добавить смайлики в richtextbox
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace abc
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
EmoticonRender ab = new EmoticonRender();
private void button1_Click(object sender, EventArgs e)
{
string textie = ab.Parse(textBox1.Text);
richTextBox1.Text += textie+"\n";
}
}
public class EmoticonRender
{
private List<KeyValuePair<string, string>> _dictionary = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>(":-)", "a.png"),
new KeyValuePair<string, string>(";-(", "a.png"),
};
public string Parse(string text)
{
foreach(KeyValuePair<string, string> kvp in _dictionary)
{
text = text.Replace(kvp.Key, @"C:\Users\Buddiez\Documents\Visual Studio 2010\Projects\abc\abc\a.png");
}
return text;
}
}
}
Я использую эту строку кодов, чтобы вставить смайлики в richtextbox, но вместо того, чтобы показывать смайлик, он показывает путь к png imgae, т.е. C:\Users\Buddiez\Documents\Visual Studio 2010\Projects\abc\abc\a.png
2 ответа
Хорошим (и относительно новым) решением может быть использование проекта EmojiBox с открытым исходным кодом.
Там не так много кода, так что за ним довольно легко следовать, просто обратите внимание, что для вставки смайлика в пользовательский RichTextBox текст, который вы вводите, должен следовать шаблону : emoji_name:
Конечно, если вы не хотите использовать весь список смайликов Unicode, вы также можете заменить файлы изображений или их имена / описания в файле json.
Скопируйте все имеющиеся у вас изображения и перейдите к >> Visual Studio, выберите Проект >> Свойства. Выберите "Ресурсы" и вставьте все скопированные изображения в правую панель.
Hashtable emotions;
void CreateEmotions()
{
emotions= new Hashtable(6);
emotions.Add(":-)", Project.Properties.Resources.regular_smile);
emotions.Add(":)", Project.Properties.Resources.regular_smile);
}
void AddEmotions()
{
foreach (string emote in emotions.Keys)
{
while(richTextBox1.Text.Contains(emote))
{
int ind = richTextBox1.Text.IndexOf(emote);
richTextBox1.Select(ind, emote.Length);
Clipboard.SetImage((Image)emotions[emote]);
richTextBox1.Paste();
}
}
}