做一个即时聊天软件
需要:本地服务器 mssqlserver ,工具:visual studio 2017
A,注册,2种方式,1,用多个groupbox把密码放在最后填写,2,直接填写密码,给出账号,资料后续自己填写。
Point1:picturebox 图片框点击时,弹出一个模态窗口,选完图片后关闭,然后窗口
有listview 大图标,imagelist,imagelist绑定listview。
1,窗体加载时显示所有图片。先在imagelist添加大小相似的图片,50X50px
for (int i = 0; i<= imagelist1.Images.Count;i++)
{
//把图片添加到listview
ListViewItem lvi = new ListViewItem();
//下标
lvi.ImageIndex = i;
listview1.Items.Add(lvi);
}
2,listview的双击事件,传下标值与图片
Program.Index = listview1.SelectedItems[0].ImageIndex;
Program.img = imagelist.Images [listview1.SelectedItems[0].ImageIndex];
注册完之后,返回一个账号,即插入的一个账号。
B,登录,验证账号与密码,但为了流量攻击,可以账号与密码一起验证。可用磁盘写入来记住密码,最近登录,最近的几个账号等等。
C,主界面 用到第三方控件,chatlistbox 就是根据我的账号在朋友表和用户表中查出我的好友的信息。并把我的信息展示在主界面。
代码 :
//创建一个分组
ChatListItem item1 = new ChatListItem(“我的好友”);
//把分组添加到控件中
clb_friend.Items.Add(item1);
//ado.net 的datatable dt连接数据库代码。
**********关键点,chatlistbox里字段的使用,赋值
foreach(DataRow r in dt.Rows)
{
ChatListSubItem sb = new ChatListSubItem();
sb.DisplayName = r[].ToString();//昵称
sb.HeadImage = …//头像
sb.ID = …//id …
item.SubItems.Add(sb);
}
还有一个,控件的双击子项
clb.DoubleClickSubItem += clb_DoubleClickSubItem;
生成一个方法,
private void CLB_DoubleClickSubItem(object sender, ChatListEventArgs e)
{
//双体得到好友id,然后id传值到聊天窗口。
string TAID = (sender as ChatListBox).SelectSubItem.ID.ToString();
Frm_Chating fc = new Frm_Chating();
fc.TID = TAID;
fc.Show();
}
…对于我的信息,可以查出来,像签名这些用到字符串的截取操作…
为了鼠标悬浮在控件上有提示,用了tooltip ttp
D,聊天,即时聊天,当然聊天这个功能最重要了。
原理,主界面timer一直查发给我的消息。用datatabel
给出提示,对应头像闪烁,或发出声音。
双击chatlistbox的项时有聊天窗口弹出。这个属于主界面。
学习的点,SoundPlayer sp = new SoundPlayer(“声音文件”);
sp.Play(); sp.Stop();
FromUserID = 好友id
闪烁,clb.GetSubItemsById(好友id)[0].IsTwinkle = true;
聊天窗口,点击发送,在消息表中插入数据。
用到timer,收到给我的消息,先把消息改为已读,再把我的消息展示在文本框。
E,好友的添加与删除。
先查找到好友。多条件组合模糊查询。
1(同意)2(要允许)3(拒绝)是哪种验证方式,查出来,给去相应提示。在加之前判断是否加的是自己,是已经是好友。
是,给出相应提示。已经是好友就在friends表里写两条sql语句,返回值都为1则是好友。
是要验证的情况,直接在消息表中插入系统消息。在用户上线时判断用户是否同意,同意,则插入两条数据在消息表。
主界面一直查消息,系统消息。
1,修改为已读,得到消息,关键字内容,字符串Contains判断。朋友表插入数据。
最后总结,主要增删改查,对sql代码的敏感,次要第三方控件的运用。