简单的实现QQ通信功能(五)

第五部分:聊天界面的设计及代码

一:效果图及界面设计

1. 效果图:

2. 界面设计:

(1)左上角显示朋友的头像和“某某正在和某某聊天”。

(2)中间的聊天窗口用了一个ListView,视图用详细信息Details,设置了一列用来显示主项,只用了其中的主项(里面加载头像和需要显示的信息及消息内容),没有设置子项信息。

(3)TextBox用来写消息。

(4)一个发送的Button。

(5)界面用Dock布局。

(6)imageList1里面放用户的ico图标,imageList2放用户头像,时钟timer1来查询显示聊天消息内容。

3. 用到的各个控件的名称:

聊天内容显示窗口chatwindow,写信息文本框senderword,发送按钮btnsender

二:代码设计:

       private string _Friendname;

        public string Friendname
        {
            get { return _Friendname; }
            set { _Friendname = value; }
        }
        private string _Mename;

        public string Mename
        {
            get { return _Mename; }
            set { _Mename = value; }
        }
        public Chat()
        {
            InitializeComponent();
        }
        //构造函数重载
        public Chat(string friendname,string mename)
            : this()
        {
            _Friendname = friendname;
            _Mename = mename;
        }
        //加载
        private void Chat_Load(object sender, EventArgs e)
        {
            //加载左上角的ico及显示文字
            UsersTableAdapter adp = new UsersTableAdapter();
            qqdata.UsersDataTable table = adp.GetDataByUsername(_Friendname);
//将取出的Image图片转为Icon格式的 Bitmap a
= (Bitmap)imageList1.Images[table[0].PhotoCode-1]; this.Icon = System.Drawing.Icon.FromHandle(a.GetHicon()); this.Text = getmemoname(_Mename) + "正在和" + getmemoname(_Friendname) + "聊天"; } //根据用户名获取昵称的方法 private string getmemoname(string name) { UsersTableAdapter adp1 = new UsersTableAdapter(); qqdata.UsersDataTable tab = new qqdata.UsersDataTable(); tab = adp1.GetDataByUsername(name); return tab[0].Memo; } //按下发送键 private void btnsender_Click(object sender, EventArgs e) { string nr = senderword.Text; DateTime sj = DateTime.Now; //将自己发送的聊天内容,时间传到数据库 new ChatTableAdapter().InsertChat(_Mename,_Friendname,nr,sj,0); senderword.Text = ""; //将自己发送的内容直接显示出来,添加显示(非绑定) qqdata.UsersDataTable tab = new UsersTableAdapter().GetDataByUsername(_Mename); //造主项 ListViewItem item = new ListViewItem(); //设置主项信息 item.Text = getmemoname(_Mename) + sj.ToString() + "说:" + nr; item.ImageIndex = tab[0].PhotoCode - 1; chatwindow.Items.Add(item); } //时间控件循环查 private void timer1_Tick(object sender, EventArgs e) { //数据库内查找此朋友发来的未读消息,添加显示出来,显示完设置已读 qqdata.ChatDataTable tab2 = new ChatTableAdapter().GetDataBySenderAndReceiver(_Friendname,_Mename,0); foreach (qqdata.ChatRow row in tab2.Rows) { qqdata.UsersDataTable tab = new UsersTableAdapter().GetDataByUsername(row.Sender); //造主项 ListViewItem item = new ListViewItem(); //设置主项信息 item.Text = getmemoname(row.Sender) + row.Time.ToString() + "说:" + row.Content; item.ImageIndex = tab[0].PhotoCode - 1; //标记为已读 if (row.Sender == _Friendname) { new ChatTableAdapter().UpdateState(1, row.Ids); } chatwindow.Items.Add(item); } } //窗体关闭的时候给N赋值为0,控制自定义控件头像在聊天关闭后来消息提醒 private void Chat_FormClosed(object sender, FormClosedEventArgs e) { Friendsmode.N = 0; }

 

posted @ 2014-11-06 19:22  从小学吐槽  阅读(401)  评论(0编辑  收藏  举报