能力有限,别人可能都是通过其他方式实现的,我这里简单粗暴一些,直接通过点击按钮后弹出个新窗体来实现。
1、先在form1上增加一个toolstrip控件,再增加个toolstripbutton按钮,用来点击后弹出新窗体,如图,并把返回的表情编码插入到文本框的光标位置处。
- private void toolStripButton1_Click(object sender, EventArgs e)
- {
- int index = textBox1.SelectionStart;
- string str;
- string BQ;
- user_bq = "";
- Form2.msg = "表情选择";
- Form2 frm = new Form2();
- frm.ShowDialog();
- str=textBox1.Text.Insert(index, user_bq);
- textBox1.Text = str;
- }
2、在form2中增加一个toolstrip,并设置dock为fill,设置layoutstyle为flow,这样子所增加的按钮就是水平排列了。
在窗体加载时,通过控件数组来加载需要显示的表情,这里的表情来自于你收集的png文件,并给表情配上文字说明,这里设置的是一次可以点击多个多情,等关闭窗体时返回表情代码,也可以设置成每次只能点击一个表情,点击后就关闭窗体。
- private void Form2_Load(object sender, EventArgs e)
- {
- //获取所有文件","并读入菜单中
- string path = Application.StartupPath+@"/ico";
- string[] filename = Directory.GetFiles(path,"*.png");
- string[] EmojiName = { "微笑","爱慕","惊呆","酷拽","抠鼻","流泪","发怒","呲牙","鼾睡","害羞","可爱"};
- int btnCount = filename.Length;
- int num = 0;
- ToolStripButton[] tsb=new ToolStripButton[btnCount];
-
- foreach (string fname in filename)
- {
- string str = "ico/emoji_"+ (num+1).ToString() + ".png";
- if (File.Exists(str))
- {
- Image img = Image.FromFile(str);
- tsb[num] = new ToolStripButton(img);
- tsb[num].Text = EmojiName[num];
- tsb[num].DisplayStyle = ToolStripItemDisplayStyle.Image;
- tsb[num].Click += new EventHandler(tsb_Click);
- tsb[num].MouseMove += new MouseEventHandler(tsb_move);
- tool1.Items.Add(tsb[num]);
- }
- num += 1;
- }
-
- Form1.user_bq = "";
-
- }
- private void tsb_Click(object sender, EventArgs e)
- {
- string msg;
- msg = ((ToolStripButton)sender).Text.ToString();
- Form1.user_bq += "["+ msg + "]";
- }
3、运行的效果如图,那怎么把表情编码显示成表情了,这个在文本框中无法实现,在richtextbox中倒是可以显示,但做为IM消息发给对方不合适,因为图片做了编码了。
简单一些的方法的就是在文本框的位置放一个同样大小的webBrowser控件,默认是隐藏的,当收到对方带有表情的消息时显示出来,或者在本地点了预览按钮后显示出来,再点一下隐藏就行了。
4、制做一个可以显示表情的webBrowser,需要在本地做一个最简单的网页user1.html,如下
- html>
- <html>
- <head>
- <style>
- img {
- vertical-align: middle;
- }
- style>
- head>
- <body style="font-size:16px;">
- <div id="show_msg">div>
- body>
- html>
点击预览按钮时,把文本框中的文字和表情代码在webBrowser中显示出来,注释掉的部分是用来把一个图片显示到richtextbox文本框中的。
- private void toolStripButton2_Click(object sender, EventArgs e)
- {
- //string path = @"emoji/1.png";
- //Image img = Image.FromFile(path);
- //Clipboard.Clear();
- //Clipboard.SetDataObject(img);
- //txt_msg.Paste();
- //Clipboard.Clear();
- //textBox1.Text = txt_msg.Rtf;
-
-
- string fname;
- string message = textBox1.Text.ToString();
- int num = 1;
- string[] EmojiName = { "[微笑]", "[爱慕]", "[惊呆]", "[酷拽]", "[抠鼻]", "[流泪]", "[发怒]", "[呲牙]", "[鼾睡]", "[害羞]", "[可爱]"};
-
- //从本地文夹中读取
- foreach (string name in EmojiName)
- {
- fname = "ico/emoji_" + (num).ToString() + ".png";
- message = message.Replace(name, "");
- num += 1;
- }
-
- web1.Document.GetElementById("show_msg").InnerHtml = message;
-
-
- }
效果如下图
好了,到此一个基本上能用的、简洁的表情选择框就做好了,使用起来也没啥大问题,后续你可以把表情图片打包到dll文件中,然后在软件中直接引用,但是dll中的图片怎么在webBrowser中显示了?反正我没有找到简单的方法,最后直接把dll中的图片转成base64编码了,然后就能在网页中显示了。