• C#制做一个 winform下的表情选择窗口


    能力有限,别人可能都是通过其他方式实现的,我这里简单粗暴一些,直接通过点击按钮后弹出个新窗体来实现。

    1、先在form1上增加一个toolstrip控件,再增加个toolstripbutton按钮,用来点击后弹出新窗体,如图,并把返回的表情编码插入到文本框的光标位置处。

    1. private void toolStripButton1_Click(object sender, EventArgs e)
    2. {
    3. int index = textBox1.SelectionStart;
    4. string str;
    5. string BQ;
    6. user_bq = "";
    7. Form2.msg = "表情选择";
    8. Form2 frm = new Form2();
    9. frm.ShowDialog();
    10. str=textBox1.Text.Insert(index, user_bq);
    11. textBox1.Text = str;
    12. }

    2、在form2中增加一个toolstrip,并设置dock为fill,设置layoutstyle为flow,这样子所增加的按钮就是水平排列了。

    在窗体加载时,通过控件数组来加载需要显示的表情,这里的表情来自于你收集的png文件,并给表情配上文字说明,这里设置的是一次可以点击多个多情,等关闭窗体时返回表情代码,也可以设置成每次只能点击一个表情,点击后就关闭窗体。

    1. private void Form2_Load(object sender, EventArgs e)
    2. {
    3. //获取所有文件","并读入菜单中
    4. string path = Application.StartupPath+@"/ico";
    5. string[] filename = Directory.GetFiles(path,"*.png");
    6. string[] EmojiName = { "微笑","爱慕","惊呆","酷拽","抠鼻","流泪","发怒","呲牙","鼾睡","害羞","可爱"};
    7. int btnCount = filename.Length;
    8. int num = 0;
    9. ToolStripButton[] tsb=new ToolStripButton[btnCount];
    10. foreach (string fname in filename)
    11. {
    12. string str = "ico/emoji_"+ (num+1).ToString() + ".png";
    13. if (File.Exists(str))
    14. {
    15. Image img = Image.FromFile(str);
    16. tsb[num] = new ToolStripButton(img);
    17. tsb[num].Text = EmojiName[num];
    18. tsb[num].DisplayStyle = ToolStripItemDisplayStyle.Image;
    19. tsb[num].Click += new EventHandler(tsb_Click);
    20. tsb[num].MouseMove += new MouseEventHandler(tsb_move);
    21. tool1.Items.Add(tsb[num]);
    22. }
    23. num += 1;
    24. }
    25. Form1.user_bq = "";
    26. }
    1. private void tsb_Click(object sender, EventArgs e)
    2. {
    3. string msg;
    4. msg = ((ToolStripButton)sender).Text.ToString();
    5. Form1.user_bq += "["+ msg + "]";
    6. }

    3、运行的效果如图,那怎么把表情编码显示成表情了,这个在文本框中无法实现,在richtextbox中倒是可以显示,但做为IM消息发给对方不合适,因为图片做了编码了。

    简单一些的方法的就是在文本框的位置放一个同样大小的webBrowser控件,默认是隐藏的,当收到对方带有表情的消息时显示出来,或者在本地点了预览按钮后显示出来,再点一下隐藏就行了。

    4、制做一个可以显示表情的webBrowser,需要在本地做一个最简单的网页user1.html,如下

    1. html>
    2. <html>
    3. <head>
    4. <style>
    5. img {
    6. vertical-align: middle;
    7. }
    8. style>
    9. head>
    10. <body style="font-size:16px;">
    11. <div id="show_msg">div>
    12. body>
    13. html>

    点击预览按钮时,把文本框中的文字和表情代码在webBrowser中显示出来,注释掉的部分是用来把一个图片显示到richtextbox文本框中的。         

    1. private void toolStripButton2_Click(object sender, EventArgs e)
    2. {
    3. //string path = @"emoji/1.png";
    4. //Image img = Image.FromFile(path);
    5. //Clipboard.Clear();
    6. //Clipboard.SetDataObject(img);
    7. //txt_msg.Paste();
    8. //Clipboard.Clear();
    9. //textBox1.Text = txt_msg.Rtf;
    10. string fname;
    11. string message = textBox1.Text.ToString();
    12. int num = 1;
    13. string[] EmojiName = { "[微笑]", "[爱慕]", "[惊呆]", "[酷拽]", "[抠鼻]", "[流泪]", "[发怒]", "[呲牙]", "[鼾睡]", "[害羞]", "[可爱]"};
    14. //从本地文夹中读取
    15. foreach (string name in EmojiName)
    16. {
    17. fname = "ico/emoji_" + (num).ToString() + ".png";
    18. message = message.Replace(name, "");
    19. num += 1;
    20. }
    21. web1.Document.GetElementById("show_msg").InnerHtml = message;
    22. }

    效果如下图

    好了,到此一个基本上能用的、简洁的表情选择框就做好了,使用起来也没啥大问题,后续你可以把表情图片打包到dll文件中,然后在软件中直接引用,但是dll中的图片怎么在webBrowser中显示了?反正我没有找到简单的方法,最后直接把dll中的图片转成base64编码了,然后就能在网页中显示了。

  • 相关阅读:
    MongoDB自学笔记(一)
    Map接口的实现类---HashMap
    初探PHP开源采集器----蓝天采集器
    Java开发中对Redis的基本操作
    【2022蓝帽杯】file_session && 浅入opcode
    矩阵按键简单使用
    使用JSAPl来做一个倒计时的效果
    【数据结构】二叉树的基本操作
    安装elasticsearch、kibana
    Linux下的常见工具的简单使用
  • 原文地址:https://blog.csdn.net/wjbych/article/details/133523014