C#实现仿微信聊天客户端界面

2018年7月1日20:20:43 XXM

Begin

最近在学校中需要编写一个局域网通信聊天,Winform原生控件效果太差,上网几番查询资料发现重写原生控件费时费力,发现可以通过内置webKit浏览器来实现窗体的样式,然后通过Js跟C#进行数据交互.

1.登录窗体

QQ截图20180701203201.png

2.loading状态

QQ截图20180701203247.png

3.聊天界面

QQ截图20180701203340.png

Login.cs

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;
using CCWin;
using WebKit;
using xxm_alert;

namespace Main
{
    public partial class login : SkinMain
    {
        public login()
        {
            InitializeComponent();
            web_html_get();
            lab_close.Parent = pb_loginBack;//关闭按钮的父容器
        }
        private void web_html_get() 
        {
            web_reg.BackColor = Color.White;
            string path = Environment.CurrentDirectory;
            path = "file:///" + path.Replace(@"\", "/") + "/web_html/login.html";
            web_reg.IsWebBrowserContextMenuEnabled = false;//右键
            web_reg.Navigate(path);
        }
        private void web_reg_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
           
        }

        private void time_web_time_Tick(object sender, EventArgs e)
        {
            WebKit.DOM.Document document = web_reg.Document;
            WebKit.DOM.Element element = document.GetElementById("btn_result");
            string value = element.GetAttribute("value");
            if (value == "success")
            {
                time_web_time.Enabled = false;
                String userAccount = document.GetElementById("userAccount").GetAttribute("value");
                String userPass = document.GetElementById("userPass").GetAttribute("value");
                userAccount = "XXMtest";
                userPass = "123456";
                //此处未写Sql参数
                string sql = string.Format("select count(*) from userInfo where userAccount='{0}' and userPass='{1}'", userAccount, userPass);
                MysqlDb mysqlDb = new MysqlDb();
                int result=0;
                try
                {
                    result = Convert.ToInt32(mysqlDb.ScalarSQL(sql));
                }
                catch (FormatException) 
                {
                    this.Close();
                    return;
                }
                if (result != 0)
                {
                   addLoading();
                   time_loading.Enabled = true;
                   
                }
                else 
                { 
                    Alert alert = new Alert(new Button(), "登录失败");
                    alert.ShowDialog();
                    time_web_time.Enabled = true;
                    element.SetAttribute("value", "failure");
                }
                

            }
        }

        private void lab_close_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        //关闭按钮变色Bein
        private void lab_close_MouseHover(object sender, EventArgs e)
        {
            lab_close.ForeColor = ColorTranslator.FromHtml("#b5b5b5");
        }

        private void lab_close_MouseLeave(object sender, EventArgs e)
        {
            lab_close.ForeColor = ColorTranslator.FromHtml("#d1d1d1");
        }
        //end
        private void addLoading()
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(login));
            PictureBox Pb = new PictureBox();
            Pb.Name = "Loading_state";
            Pb.Size = new Size(350, 565);
            Pb.Location = new Point(0, 0);
            Pb.Visible = true;
            Pb.Image = Properties.Resources.loading;
            this.Controls.Add(Pb);
            Pb.BringToFront();
            
        }
        //end
        private Boolean isControl(String controlName)
        {
            foreach (Control Item in this.Controls)
            {
                if (Item.Name == controlName)
                {
                    return true;
                }
            }
            return false;
        }
        private Boolean removeControl(String controlName)
        {
            foreach (Control Item in this.Controls)
            {
                if (Item.Name == controlName)
                {
                    this.Controls.Remove(Item);
                    return true;
                }
            }
            return false;
        }

        private void time_loading_Tick(object sender, EventArgs e)
        {
            time_loading.Enabled = false;
            removeControl("Loading_state");
            this.Hide();
            Main main = new Main();
            DialogResult Dialogresult = main.ShowDialog(); ; //获取窗体返回值
            if (Dialogresult == DialogResult.Cancel)//判断窗体等于关闭
            {
                this.Close();
            }
        }
    }
}


End

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容