1、QQ代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using Aptech.UI;using System.Data.SqlClient;using System.Media;namespace MyQQProgram / / 登录主窗体 / public partial class MainForm : Form int
2、fromUserId; / 消息的发起者 int friendFaceId; / 发消息的好友的头像Id int messageImageIndex = 0; / 工具栏中的消息图标的索引 public MainForm() InitializeComponent(); private void MainForm_Load(object sender, EventArgs e) / 工具栏的消息图标 tsbtnMessageReading.Image = ilMessage.Images0; /显示个人的信息 ShowSelfInfo(); / 添加 SideBar 的两个组 sbFriend
3、s.AddGroup(我的好友); sbFriends.AddGroup(陌生人); / 向我的好友组中添加我的好友列表 ShowFriendList(); #region cmsFriendList控件部分 / 显示大、小头像视图切换 private void tsmiView_Click(object sender, EventArgs e) if (sbFriends.View = SbView.LargeIcon) sbFriends.View = SbView.SmallIcon; tsmiView.Text = 显示大头像; else if (sbFriends.View = Sb
4、View.SmallIcon) sbFriends.View = SbView.LargeIcon; tsmiView.Text = 显示小头像; / 删除好友 private void tsmiDelete_Click(object sender, EventArgs e) DialogResult result; / 对话框结果 int deleteResult = 0; / 操作结果 if (sbFriends.SeletedItem != null) result = MessageBox.Show(确实要删除该好友吗?, 提示, MessageBoxButtons.YesNo, Me
5、ssageBoxIcon.Question); if (result = DialogResult.Yes) / 确认删除 if (sbFriends.VisibleGroup = sbFriends.Groups0) DBHelper.connection.Open(); string sql = string.Format( DELETE FROM Friends WHERE HostId=0 AND FriendId=1,UserHelper.loginId, Convert.ToInt32(sbFriends.SeletedItem.Tag); SqlCommand cmd = new
6、 SqlCommand(sql, DBHelper.connection); int results = -1; try results = Convert.ToInt32(cmd.ExecuteScalar(); catch (Exception ex) MessageBox.Show(ex.Message); finally DBHelper.connection.Close(); if (deleteResult = 1) MessageBox.Show(好友已删除, 提示, MessageBoxButtons.OK, MessageBoxIcon.Information); sbFri
7、ends.SeletedItem.Parent.Items.Remove(sbFriends.SeletedItem); else MessageBox.Show(好友已删除, 提示, MessageBoxButtons.OK, MessageBoxIcon.Information); sbFriends.SeletedItem.Parent.Items.Remove(sbFriends.SeletedItem); / 将选中的人加为好友 private void tsmiAddFriend_Click(object sender, EventArgs e) int result = 0; /
8、 操作结果 DBHelper.connection.Open(); string sql = string.Format( INSERT INTO Friends (HostId, FriendId) VALUES(0,1), UserHelper.loginId, Convert.ToInt32(sbFriends.SeletedItem.Tag); SqlCommand cmd = new SqlCommand(sql, DBHelper.connection); result = Convert.ToInt32(cmd.ExecuteNonQuery(); if (result = 1)
9、 MessageBox.Show(添加成功!, 提示, MessageBoxButtons.OK, MessageBoxIcon.Information); sbFriends.SeletedItem.Parent.Items.Remove(sbFriends.SeletedItem); ShowFriendList(); / 更新好友列表 else MessageBox.Show(添加失败,请稍候再试!, 提示, MessageBoxButtons.OK, MessageBoxIcon.Information); #endregion #regiontsOperation控件部分 / 显示个
10、人信息窗体 private void tsbtnPersonalInfo_Click(object sender, EventArgs e) PersonInfoForm PersonInfoForm = new PersonInfoForm(); PersonInfoForm.mainForm = this; / 将当前窗体本身传给个人信息窗体 PersonInfoForm.Show(); / 显示查找好友窗体 private void tsbtnSearchFriend_Click(object sender, EventArgs e) SearchFriendFrom searchFri
11、endForm = new SearchFriendFrom(); searchFriendForm.Show(); / 点击更新好友列表 private void tsbtnUpdateFriendList_Click(object sender, EventArgs e) ShowFriendList(); / 单击时显示请求好友消息窗体 private void tsbtnMessageReading_Click(object sender, EventArgs e) tmrAddFriend.Stop(); / 消息timer停止运行 / 图片恢复正常 messageImageInde
12、x = 0; tsbtnMessageReading.Image = ilMessage.ImagesmessageImageIndex; / 显示系统消息窗体 RequestForm requestForm = new RequestForm(); requestForm.Show(); / 退出 private void tsbtnExit_Click(object sender, EventArgs e) DialogResult result = MessageBox.Show(确实要退出吗?, 操作确认, MessageBoxButtons.YesNo, MessageBoxIcon
13、.Question); if (result = DialogResult.Yes) Application.Exit(); #endregion / 显示右键菜单时,控制哪些菜单不可见 private void cmsFriendList_Opening(object sender, CancelEventArgs e) / 如果没有选中的项 if (sbFriends.SeletedItem = null) tsmiDelete.Visible = false; else tsmiDelete.Visible = true; / 如果选中的是陌生人,显示加为好友菜单 if (sbFrien
14、ds.SeletedItem != null & sbFriends.SeletedItem.Parent = sbFriends.Groups1) tsmiAddFriend.Visible = true; else tsmiAddFriend.Visible = false; / 双击一项,弹出聊天窗体 private void sbFriends_ItemDoubleClick(SbItemEventArgs e) / 消息timer停止运行 if (tmrChatRequest.Enabled = true) tmrChatRequest.Stop(); e.Item.ImageInd
15、ex = this.friendFaceId; / 显示聊天窗体 ChatForm chatForm = ChatForm.GetChatForm(e.Item.Tag.ToString(); chatForm.friendId = Convert.ToInt32(e.Item.Tag); / 号码 chatForm.nickName = e.Item.Text; / 昵称 chatForm.faceId = e.Item.ImageIndex; / 头像 chatForm.Show(); / 可见组发生变化时,发出声音 private void sbFriends_VisibleGroupC
16、hanged(SbGroupEventArgs e) SoundPlayer player = new SoundPlayer(folder.wav); player.Play(); #region 三个计时器部分 / 定时扫描数据库,找到未读消息 private void tmrMessage_Tick(object sender, EventArgs e) ShowFriendList(); / 刷新好友列表 int messageTypeId = 1; / 消息类型 int messageState = 1; / 消息状态 DBHelper.connection.Open(); /找出未
17、读消息对应的好友Id string sql = string.Format( SELECT Top 1 FromUserId, MessageTypeId, MessageState FROM Messages WHERE ToUserId=0 AND MessageState=0, UserHelper.loginId); /消息有两种类型:聊天消息、添加好友消息 SqlCommand comm = new SqlCommand(sql, DBHelper.connection); SqlDataReader dataReader = comm.ExecuteReader(); / 循环读出
18、一个未读消息 while (dataReader.Read() this.fromUserId = (int)dataReaderFromUserId; messageTypeId = (int)dataReaderMessageTypeId; messageState = (int)dataReaderMessageState; dataReader.Close(); / 判断消息类型,如果是添加好友消息,就启动喇叭timer,让小喇叭闪烁 if (messageTypeId = 2 & messageState = 0) SoundPlayer player = new SoundPlay
19、er(system.wav); player.Play(); tmrAddFriend.Start(); / 如果是聊天消息,就启动聊天timer,让好友头像闪烁 else if (messageTypeId = 1 & messageState = 0) / 获得发消息的人的头像Id sql = SELECT FaceId FROM Users WHERE Id= + this.fromUserId; this.friendFaceId = Convert.ToInt32(comm.ExecuteScalar(); / 设置发消息的好友的头像索引 / 如果发消息的人没有在列表中就添加到陌生人
20、列表中 if (!HasShowUser(fromUserId) UpdateStranger(fromUserId); SoundPlayer player = new SoundPlayer(msg.wav); player.Play(); tmrChatRequest.Start(); / 启动闪烁头像定时器 DBHelper.connection.Close(); / 控制喇叭闪烁 private void tmrAddFriend_Tick(object sender, EventArgs e) / 反复修改它的图像 messageImageIndex = messageImageI
21、ndex = 0 ? 1 : 0; tsbtnMessageReading.Image = ilMessage.ImagesmessageImageIndex; / 让相应的好友头像闪烁 private void tmrChatRequest_Tick(object sender, EventArgs e) / 循环好友列表两个组中的每个item,找到发消息的好友,让他的头像闪烁 for (int i = 0; i 2; i+) for (int j = 0; j sbFriends.Groupsi.Items.Count; j+) if (Convert.ToInt32(sbFriends.
22、Groupsi.Itemsj.Tag) = this.fromUserId) if (sbFriends.Groupsi.Itemsj.ImageIndex 100) sbFriends.Groupsi.Itemsj.ImageIndex = 100;/ 索引为100的图片是一个空白图片 else sbFriends.Groupsi.Itemsj.ImageIndex = this.friendFaceId; sbFriends.Invalidate(); / 重新绘制 #endregion / / 登录后显示个人的信息 / public void ShowSelfInfo() string
23、nickName = ; / 昵称 int faceId = 0; / 头像索引 / 取得当前用户的昵称、头像 if (DBHelper.connection.State = ConnectionState.Closed) DBHelper.connection.Open(); string sql = string.Format(SELECT NickName, FaceId FROM Users WHERE Id=0,UserHelper.loginId); SqlCommand comm = new SqlCommand(sql, DBHelper.connection); SqlDat
24、aReader dataReader = comm.ExecuteReader(); if (dataReader.Read() if (!(dataReaderNickName is DBNull) / 判断数据库类型是否为空 nickName = Convert.ToString(dataReaderNickName); faceId = Convert.ToInt32(dataReaderFaceId); dataReader.Close(); / 在窗体标题显示登录的昵称、号码 this.Text = UserHelper.loginId.ToString(); this.picFac
25、e.Image = ilFaces.ImagesfaceId; this.lblLoginId.Text = string.Format(0(1), nickName, UserHelper.loginId.ToString(); DBHelper.connection.Close(); / / 向我的好友组中添加我的好友列表 / private void ShowFriendList() / 清空原来的列表 sbFriends.Groups0.Items.Clear(); / 查找有哪些好友 DBHelper.connection.Open(); string sql = string.Fo
26、rmat( SELECT FriendId,NickName,FaceId FROM Users,Friends WHERE Friends.HostId=0 AND Users.Id=Friends.FriendId, UserHelper.loginId); SqlCommand comm = new SqlCommand(sql, DBHelper.connection); SqlDataReader dataReader = comm.ExecuteReader(); / 循环添加好友列表 while (dataReader.Read() / 创建一个SideBar项 SbItem i
27、tem = new SbItem(string)dataReaderNickName, (int)dataReaderFaceId); item.Tag = (int)dataReaderFriendId; / 将号码放在Tag属性中 / SideBar中的组可以通过数组的方式访问,按照添加的顺序索引从0开始 / Groups0表示SideBar中的第一个组,也就是“我的好友”组 sbFriends.Groups0.Items.Add(item); / 向SideBar的“我的好友”组中添加项 dataReader.Close(); DBHelper.connection.Close ();
28、/ / 判断发消息的人是否在列表中 / private bool HasShowUser(int loginId) bool find = false; / 表示是否在当前显示出的用户列表中找到了该用户 / 循环 SideBar 中的2个组,寻找发消息的人是否在列表中 for (int i = 0; i 2; i+) for (int j = 0; j sbFriends.Groupsi.Items.Count; j+) if (Convert.ToInt32(sbFriends.Groupsi.Itemsj.Tag) = loginId) find = true; return find; / / 更新陌生人列表 / private void UpdateStranger(int loginId) DBHelper.connection.Open(); / 选出这个人的基本信息 string sql = SELECT NickName, FaceId F
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1