首页 > 代码库 > 简单的实现QQ通信功能(五)
简单的实现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); 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; }
简单的实现QQ通信功能(五)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。