UserHelper..cs类代码using System;using System.Collections.Generic;using System.Text;namespace MyQQ{//记录登录的用户Idclass UserHelper{public static int loginId; //登录的用户Id}}using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace MyQQ{///<summary>///聊天窗体///</summary>public partial class ChatForm : Form{public int friendId; // 当前聊天的好友号码public string nickName; // 当前聊天的好友昵称public int faceId; // 当前聊天的好友头像Idpublic ChatForm(){InitializeComponent();}// 窗体加载时的动作private void ChatForm_Load(object sender, EventArgs e){// 设置窗体标题this.Text = string.Format("与{0}聊天中",nickName);// 设置窗体顶部显示的好友信息picFace.Image = ilFaces.Images[faceId];lblFriend.Text = string.Format("{0}({1})",nickName,friendId);// 读取所有的未读消息,显示在窗体中ShowMessage();}// 关闭窗体private void btnClose_Click(object sender, EventArgs e){this.Close();}// 发送消息private void btnSend_Click(object sender, EventArgs e){if (txtChat.Text.Trim() == "") // 不能发送空消息{MessageBox.Show("不能发送空消息!", "提示", MessageBoxButtons.OK, rmation);return;}else if (txtChat.Text.Trim().Length > 50){MessageBox.Show("消息内容过长,请分为几条发送!", "提示", MessageBoxButtons.OK, rmation);return;}else// 发送消息,写入数据库{// MessageTypeId:1-表示聊天消息,为简化操作没有读取数据表,到S2可以用常量或者枚举实现// MessageState:0-表示消息状态是未读int result = -1; // 表示操作数据库的结果string sql = string.Format("INSERT INTO Messages (FromUserId, ToUserId, Message, MessageTypeId,MessageState) VALUES ({0},{1},'{2}',{3},{4})",UserHelper.loginId, friendId, txtChat.Text.Trim(), 1, 0);try{// 执行命令SqlCommand command = new SqlCommand(sql, DBHelper.connection);DBHelper.connection.Open();result = command.ExecuteNonQuery();}catch (Exception ex){Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}if (result != 1){MessageBox.Show("服务器出现意外错误!", "抱歉", MessageBoxButtons.OK, MessageBoxIcon.Error);}txtChat.Text = ""; // 输入消息清空this.Close();}}///<summary>///读取所有的未读消息,显示在窗体中///</summary>private void ShowMessage(){string messageIdsString = ""; // 消息的Id组成的字符串string message; // 消息内容string messageTime; // 消息发出的时间// 读取消息的SQL语句string sql = string.Format("SELECT Id, Message,MessageTime From Messages WHERE FromUserId={0} AND ToUserId={1} AND MessageTypeId=1 AND MessageState=0",friendId,UserHelper.loginId);try{SqlCommand command = new SqlCommand(sql, DBHelper.connection);DBHelper.connection.Open();SqlDataReader reader = command.ExecuteReader();// 循环将消息添加到窗体上while (reader.Read()){messageIdsString += Convert.ToString(reader["Id"]) + "_";message = Convert.ToString(reader["Message"]);messageTime = Convert.ToDateTime(reader["MessageTime"]).ToString(); // 转换为日期类型,告诉学员lblMessages.Text += string.Format("\n{0} {1}\n{2}",nickName,messageTime,message);}reader.Close();}catch (Exception ex){Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}// 把显示出的消息置为已读if (messageIdsString.Length > 1){messageIdsString.Remove(messageIdsString.Length - 1);SetMessageRead(messageIdsString, '_');}}///<summary>///把显示出的消息置为已读///</summary>private void SetMessageRead(string messageIdsString, char separator){string[] messageIds = messageIdsString.Split(separator); // 分割出每个消息Idstring sql = "Update Messages SET MessageState=1 WHERE Id="; // 更新状态的SQL语句的固定部分string updateSql; // 执行的SQL语句try{SqlCommand command = new SqlCommand(); // 创建Command对象command.Connection = DBHelper.connection; // 指定数据库连接DBHelper.connection.Open(); // 打开数据库连接foreach (string id in messageIds){if (id != ""){updateSql = sql + id; // 补充完整的SQL语句 mandText = updateSql; // 指定要执行的SQL语句int result = command.ExecuteNonQuery(); // 执行命令}}}catch (Exception ex){Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}}ChatForm.cs代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace MyQQ{///<summary>///聊天窗体///</summary>public partial class ChatForm : Form{public int friendId; // 当前聊天的好友号码public string nickName; // 当前聊天的好友昵称public int faceId; // 当前聊天的好友头像Idpublic ChatForm(){InitializeComponent();}// 窗体加载时的动作private void ChatForm_Load(object sender, EventArgs e){// 设置窗体标题this.Text = string.Format("与{0}聊天中",nickName);// 设置窗体顶部显示的好友信息picFace.Image = ilFaces.Images[faceId];lblFriend.Text = string.Format("{0}({1})",nickName,friendId);// 读取所有的未读消息,显示在窗体中ShowMessage();}// 关闭窗体private void btnClose_Click(object sender, EventArgs e){this.Close();}// 发送消息private void btnSend_Click(object sender, EventArgs e){if (txtChat.Text.Trim() == "") // 不能发送空消息{MessageBox.Show("不能发送空消息!", "提示", MessageBoxButtons.OK, rmation);return;}else if (txtChat.Text.Trim().Length > 50){MessageBox.Show("消息内容过长,请分为几条发送!", "提示", MessageBoxButtons.OK, rmation);return;}else// 发送消息,写入数据库{// MessageTypeId:1-表示聊天消息,为简化操作没有读取数据表,到S2可以用常量或者枚举实现// MessageState:0-表示消息状态是未读int result = -1; // 表示操作数据库的结果string sql = string.Format("INSERT INTO Messages (FromUserId, ToUserId, Message, MessageTypeId, MessageState) VALUES ({0},{1},'{2}',{3},{4})",UserHelper.loginId, friendId, txtChat.Text.Trim(), 1, 0);try{// 执行命令SqlCommand command = new SqlCommand(sql, DBHelper.connection);DBHelper.connection.Open();result = command.ExecuteNonQuery();}catch (Exception ex){Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}if (result != 1){MessageBox.Show("服务器出现意外错误!", "抱歉", MessageBoxButtons.OK, MessageBoxIcon.Error);}txtChat.Text = ""; // 输入消息清空this.Close();}}///<summary>///读取所有的未读消息,显示在窗体中///</summary>private void ShowMessage(){string messageIdsString = ""; // 消息的Id组成的字符串string message; // 消息内容string messageTime; // 消息发出的时间// 读取消息的SQL语句string sql = string.Format("SELECT Id, Message,MessageTime From Messages WHERE FromUserId={0} AND ToUserId={1} AND MessageTypeId=1 AND MessageState=0",friendId,UserHelper.loginId);try{SqlCommand command = new SqlCommand(sql, DBHelper.connection);DBHelper.connection.Open();SqlDataReader reader = command.ExecuteReader();// 循环将消息添加到窗体上while (reader.Read()){messageIdsString += Convert.ToString(reader["Id"]) + "_";message = Convert.ToString(reader["Message"]);messageTime = Convert.ToDateTime(reader["MessageTime"]).ToString(); // 转换为日期类型,告诉学员lblMessages.Text += string.Format("\n{0} {1}\n{2}",nickName,messageTime,message);}reader.Close();}catch (Exception ex){Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}// 把显示出的消息置为已读if (messageIdsString.Length > 1){messageIdsString.Remove(messageIdsString.Length - 1);SetMessageRead(messageIdsString, '_');}}///<summary>///把显示出的消息置为已读///</summary>private void SetMessageRead(string messageIdsString, char separator){string[] messageIds = messageIdsString.Split(separator); // 分割出每个消息Idstring sql = "Update Messages SET MessageState=1 WHERE Id="; // 更新状态的SQL语句的固定部分string updateSql; // 执行的SQL语句try{SqlCommand command = new SqlCommand(); // 创建Command对象command.Connection = DBHelper.connection; // 指定数据库连接DBHelper.connection.Open(); // 打开数据库连接foreach (string id in messageIds){if (id != ""){updateSql = sql + id; // 补充完整的SQL语句 mandText = updateSql; // 指定要执行的SQL语句int result = command.ExecuteNonQuery(); // 执行命令}}}catch (Exception ex){Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}}private void lblMessages_Click(object sender, EventArgs e){}}}DBHelper.cs类代码using System;using System.Collections.Generic;using System.Text;using System.Data.SqlClient;namespace MyQQ{// 数据库帮助类,维护数据库连接字符串和数据库连接对象class DBHelper{private static string connString = "Data Source=.;database=MyQQ;integrated security=sspi";public static SqlConnection connection = new SqlConnection(connString);}}using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace MyQQ{///<summary>///头像选择窗体///</summary>public partial class FacesForm : Form{public PersonalInfoForm personalInfoForm; // 个人信息窗体public FacesForm(){InitializeComponent();}1.FacesForm.cs代码private void FacesForm_Load(object sender, EventArgs e){for (int i = 0; i < ilFaces.Images.Count; i++){lvFaces.Items.Add(i.ToString());lvFaces.Items[i].ImageIndex = i;}}// 确定选择头像private void btnOK_Click(object sender, EventArgs e){if (lvFaces.SelectedItems.Count == 0){MessageBox.Show("请选择一个头像!", "提示", MessageBoxButtons.OK, rmation);}else{int faceId = lvFaces.SelectedItems[0].ImageIndex; // 获得当前选中的头像的索引personalInfoForm.ShowFace(faceId); // 设置个人信息窗体中显示的头像this.Close();}}// 双击时选择头像private void lvIcons_MouseDoubleClick(object sender, MouseEventArgs e){int faceId = lvFaces.SelectedItems[0].ImageIndex; // 获得当前选中的头像的索引 personalInfoForm.ShowFace(faceId); // 设置个人信息窗体中显示的头像this.Close();}// 关闭窗体private void btnCancel_Click(object sender, EventArgs e){this.Close();}}}LoginForm.csusing System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace MyQQ{///<summary>///登录窗体///</summary>public partial class LoginForm : Form{public LoginForm(){InitializeComponent();}// 取消按钮的事件处理private void btnCancel_Click(object sender, EventArgs e){Application.Exit();}// 打开申请号码界面private void llbl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {RegisterForm registerForm = new RegisterForm();registerForm.Show();}// 登录按钮事件处理private void btnLogin_Click(object sender, EventArgs e){bool error = false; // 标志在执行数据库操作的过程中是否出错// 如果输入验证成功,就验证身份,并转到相应的窗体if (ValidateInput()){int num = 0; // 数据库操作结果try{// 查询用的sql语句string sql = string.Format("SELECT COUNT(*) FROM Users WHERE Id={0} AND LoginPwd = '{1}'",int.Parse(txtLoginId.Text.Trim()), txtLoginPwd.Text.Trim());// 创建Command 对象SqlCommand command = new SqlCommand(sql, DBHelper.connection);DBHelper.connection.Open(); // 打开数据库连接num = Convert.ToInt32(command.ExecuteScalar());}catch (Exception ex){error = true;Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close(); // 关闭数据库连接}if (!error && (num == 1)) // 验证通过{// 设置登录的用户号码UserHelper.loginId = int.Parse(txtLoginId.Text.Trim());// 创建主窗体MainForm mainForm = new MainForm();mainForm.Show(); // 显示窗体this.Visible = false; // 当前窗体不可见}else{MessageBox.Show("输入的用户名或密码有误!", "登录提示", MessageBoxButtons.OK, MessageBoxIcon.Error);}}}// 忘记密码标签private void llblFogetPwd_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {MessageBox.Show("该功能尚未开通!","提示",MessageBoxButtons.OK,rmation);}// 用户输入验证private bool ValidateInput(){// 验证用户输入if (txtLoginId.Text.Trim() == ""){MessageBox.Show("请输入登录的号码", "登录提示", MessageBoxButtons.OK, rmation);txtLoginId.Focus();return false;}else if (txtLoginPwd.Text.Trim() == ""){MessageBox.Show("请输入密码", "登录提示", MessageBoxButtons.OK, rmation);txtLoginPwd.Focus();return false;}return true;}}}MainForm.csusing System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using Aptech.UI;using System.Data.SqlClient;using System.Media;namespace MyQQ{///<summary>///登录后的主窗体///</summary>public partial class MainForm : Form{int fromUserId; // 消息的发起者int friendFaceId; // 发消息的好友的头像Idint messageImageIndex = 0; // 工具栏中的消息图标的索引public MainForm(){InitializeComponent();}// 窗体加载时发生private void MainForm_Load(object sender, EventArgs e) {// 工具栏的消息图标tsbtnMessageReading.Image = ilMessage.Images[0];// 显示个人的信息ShowSelfInfo();// 添加SideBar 的两个组sbFriends.AddGroup("我的好友");sbFriends.AddGroup("陌生人");// 向我的好友组中添加我的好友列表ShowFriendList();}// 窗体关闭后,退出应用程序private void MainForm_FormClosed(object sender, FormClosedEventArgs e) {Application.Exit();}// 显示个人信息窗体private void tsbtnPersonalInfo_Click(object sender, EventArgs e){PersonalInfoForm personalInfoForm = new PersonalInfoForm();personalInfoForm.mainForm = this; // 将当前窗体本身传给个人信息窗体 personalInfoForm.Show();}// 显示查找好友窗体private void tsbtnSearchFriend_Click(object sender, EventArgs e){SearchFriendForm searchFriendForm = new SearchFriendForm();searchFriendForm.Show();}// 双击一项,弹出聊天窗体private void sbFriends_ItemDoubleClick(SbItemEventArgs e){// 消息timer停止运行if (tmrChatRequest.Enabled == true){tmrChatRequest.Stop();e.Item.ImageIndex = this.friendFaceId;}// 显示聊天窗体ChatForm chatForm = new ChatForm();chatForm.friendId = Convert.ToInt32(e.Item.Tag); // 号码chatForm.nickName = e.Item.Text; // 昵称chatForm.faceId = e.Item.ImageIndex; // 头像chatForm.Show();}// 点击刷新好友列表private void tsbtnUpdateFriendList_Click(object sender, EventArgs e){ShowFriendList();}// 定时扫描数据库,找到未读消息private void tmrMessage_Tick(object sender, EventArgs e){ShowFriendList(); // 刷新好友列表int messageTypeId = 1; // 消息类型int messageState = 1; // 消息状态// 找出未读消息对应的好友Idstring sql = string.Format("SELECT Top 1 FromUserId, MessageTypeId, MessageState FROM Messages WHERE ToUserId={0} AND MessageState=0", UserHelper.loginId);SqlCommand command;// 消息有两种类型:聊天消息、添加好友消息try{command = new SqlCommand(sql, DBHelper.connection);DBHelper.connection.Open();SqlDataReader dataReader = command.ExecuteReader();// 循环读出一个未读消息if (dataReader.Read()){this.fromUserId = (int)dataReader["FromUserId"];messageTypeId = (int)dataReader["MessageTypeId"];messageState = (int)dataReader["MessageState"];}dataReader.Close();}catch (Exception ex){Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}// 判断消息类型,如果是添加好友消息,就启动喇叭timer,让小喇叭闪烁if (messageTypeId == 2 && messageState == 0){SoundPlayer player = new SoundPlayer("system.wav");player.Play();tmrAddFriend.Start();}// 如果是聊天消息,就启动聊天timer,让好友头像闪烁else if (messageTypeId == 1 && messageState == 0){// 获得发消息的人的头像Idsql = "SELECT FaceId FROM Users WHERE Id=" + this.fromUserId;try{command = new SqlCommand(sql, DBHelper.connection);DBHelper.connection.Open();this.friendFaceId = Convert.ToInt32(command.ExecuteScalar()); // 设置发消息的好友的头像索引}catch (Exception ex){Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}// 如果发消息的人没有在列表中就添加到陌生人列表中if (!HasShowUser(fromUserId)){UpdateStranger(fromUserId);}SoundPlayer player = new SoundPlayer("msg.wav");player.Play();tmrChatRequest.Start(); // 启动闪烁头像定时器}}// 控制喇叭闪烁private void tmrAddFriend_Tick(object sender, EventArgs e){// 反复修改它的图像messageImageIndex = messageImageIndex == 0 ? 1:0;tsbtnMessageReading.Image = ilMessage.Images[messageImageIndex];}// 单击时显示请求好友消息窗体private void tsbtnMessageReading_Click(object sender, EventArgs e){tmrAddFriend.Stop(); // 消息timer停止运行// 图片恢复正常messageImageIndex = 0;tsbtnMessageReading.Image = ilMessage.Images[messageImageIndex];// 显示系统消息窗体RequestForm requestForm = new RequestForm();requestForm.Show();}// 让相应的好友头像闪烁private void tmrChatRequest_Tick(object sender, EventArgs e){// 循环好友列表两个组中的每个item,找到发消息的好友,让他的头像闪烁for (int i = 0; i < 2; i++){for (int j = 0; j < sbFriends.Groups[i].Items.Count; j++){if(Convert.ToInt32(sbFriends.Groups[i].Items[j].Tag) == this.fromUserId) {if (sbFriends.Groups[i].Items[j].ImageIndex < 100){sbFriends.Groups[i].Items[j].ImageIndex = 100;// 索引为的图片是一个空白图片}else{sbFriends.Groups[i].Items[j].ImageIndex = this.friendFaceId;}sbFriends.Invalidate(); // 重新绘制,只要告诉学生需要这句话才能正常闪烁头像就行}}}}// 显示右键菜单时,控制哪些菜单不可见private void cmsFriendList_Opening(object sender, CancelEventArgs e){// 如果没有选中的项if (sbFriends.SeletedItem == null){tsmiDelete.Visible = false;}else{tsmiDelete.Visible = true;}// 如果选中的是陌生人,显示加为好友菜单if (sbFriends.SeletedItem != null && sbFriends.SeletedItem.Parent == sbFriends.Groups[1]){tsmiAddFriend.Visible = true;}else{tsmiAddFriend.Visible = false;}}// 显示大、小头像视图切换private void tsmiView_Click(object sender, EventArgs e){if (sbFriends.View == rgeIcon){sbFriends.View = SbView.SmallIcon;tsmiView.Text = "显示大头像";}else if (sbFriends.View == SbView.SmallIcon){sbFriends.View = rgeIcon;tsmiView.Text = "显示小头像";}}// 删除好友private void tsmiDelete_Click(object sender, EventArgs e){DialogResult result; // 对话框结果int deleteResult = 0; // 操作结果if (sbFriends.SeletedItem != null){result = MessageBox.Show("确实要删除该好友吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);if (result == DialogResult.Yes) // 确认删除{if (sbFriends.VisibleGroup == sbFriends.Groups[0]){string sql = string.Format("DELETE FROM Friends WHERE HostId={0} AND FriendId={1}",UserHelper.loginId, Convert.ToInt32(sbFriends.SeletedItem.Tag));try{SqlCommand command = new SqlCommand(sql, DBHelper.connection);DBHelper.connection.Open();deleteResult = command.ExecuteNonQuery();}catch (Exception ex){Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}if (deleteResult == 1){MessageBox.Show("好友已删除", "提示", MessageBoxButtons.OK, rmation);sbFriends.SeletedItem.Parent.Items.Remove(sbFriends.SeletedItem);}}else{MessageBox.Show("好友已删除", "提示", MessageBoxButtons.OK, rmation);sbFriends.SeletedItem.Parent.Items.Remove(sbFriends.SeletedItem);}}}}// 将选中的人加为好友private void tsmiAddFriend_Click(object sender, EventArgs e){int result = 0; // 操作结果string sql = string.Format("INSERT INTO Friends (HostId, FriendId) VALUES({0},{1})",UserHelper.loginId, Convert.ToInt32(sbFriends.SeletedItem.Tag));try{SqlCommand command = new SqlCommand(sql, DBHelper.connection);DBHelper.connection.Open();result = command.ExecuteNonQuery();}catch (Exception ex){Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}if (result == 1){MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, rmation);sbFriends.SeletedItem.Parent.Items.Remove(sbFriends.SeletedItem);ShowFriendList(); // 更新好友列表}else{MessageBox.Show("添加失败,请稍候再试!", "提示", MessageBoxButtons.OK, rmation);}}// 退出private void tsbtnExit_Click(object sender, EventArgs e){DialogResult result = MessageBox.Show("确实要退出吗?", "操作确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);if (result == DialogResult.Yes){Application.Exit();}}// 可见组发生变化时,发出声音private void sbFriends_VisibleGroupChanged(SbGroupEventArgs e){SoundPlayer player = new SoundPlayer("folder.wav");player.Play();}///<summary>///登录后显示个人的信息///</summary>public void ShowSelfInfo(){string nickName = ""; // 昵称int faceId = 0; // 头像索引bool error = false; // 标识是否出现错误// 取得当前用户的昵称、头像string sql = string.Format("SELECT NickName, FaceId FROM Users WHERE Id={0}",UserHelper.loginId);try{// 查询SqlCommand command = new SqlCommand(sql, DBHelper.connection);DBHelper.connection.Open();SqlDataReader dataReader = command.ExecuteReader();if (dataReader.Read()){if (!(dataReader["NickName"] is DBNull)) // 判断数据库类型是否为空 {nickName = Convert.ToString(dataReader["NickName"]);}faceId = Convert.ToInt32(dataReader["FaceId"]);}dataReader.Close();}catch (Exception ex){error = true;Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}// 根据操作数据库结果进行不同的操作if (error){MessageBox.Show("服务器请求失败!请重新登录!", "意外错误", MessageBoxButtons.OK, MessageBoxIcon.Error);Application.Exit();}else{// 在窗体标题显示登录的昵称、号码this.Text = UserHelper.loginId.ToString();this.picFace.Image = ilFaces.Images[faceId];this.lblLoginId.Text = string.Format("{0}({1})", nickName,UserHelper.loginId.ToString());}}///<summary>///向我的好友组中添加我的好友列表///</summary>private void ShowFriendList(){// 清空原来的列表sbFriends.Groups[0].Items.Clear();bool error = false; // 标识数据库是否出错// 查找有哪些好友string sql = string.Format("SELECT FriendId,NickName,FaceId FROM Users,Friends WHERE Friends.HostId={0} AND Users.Id=Friends.FriendId",UserHelper.loginId);try{// 执行查询SqlCommand command = new SqlCommand(sql, DBHelper.connection);DBHelper.connection.Open();SqlDataReader dataReader = command.ExecuteReader();// 循环添加好友列表while (dataReader.Read()){// 创建一个SideBar项SbItem item = new SbItem((string)dataReader["NickName"], (int)dataReader["FaceId"]);item.Tag = (int)dataReader["FriendId"]; // 将号码放在Tag属性中// SideBar中的组可以通过数组的方式访问,按照添加的顺序索引从开始// Groups[0]表示SideBar中的第一个组,也就是“我的好友”组sbFriends.Groups[0].Items.Add(item); // 向SideBar的“我的好友”组中添加项 }dataReader.Close();}catch (Exception ex){error = true;Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}// 出错了if (error){MessageBox.Show("服务器发生意外错误!请尝试重新登录", "抱歉", MessageBoxButtons.OK, MessageBoxIcon.Error);Application.Exit();}}///<summary>///判断发消息的人是否在列表中///</summary>private bool HasShowUser(int loginId){bool find = false; // 表示是否在当前显示出的用户列表中找到了该用户// 循环SideBar 中的个组,寻找发消息的人是否在列表中for (int i = 0; i < 2; i++){for (int j = 0; j < sbFriends.Groups[i].Items.Count; j++){if (Convert.ToInt32(sbFriends.Groups[i].Items[j].Tag) == loginId){find = true;}}}return find;}///<summary>///更新陌生人列表///</summary>private void UpdateStranger(int loginId){// 选出这个人的基本信息string sql = "SELECT NickName, FaceId FROM Users WHERE Id=" + loginId;bool error = false; // 用来标识是否出现错误try{SqlCommand command = new SqlCommand(sql, DBHelper.connection);DBHelper.connection.Open();SqlDataReader dataReader = command.ExecuteReader(); // 查询if (dataReader.Read()){SbItem item = new SbItem((string)dataReader["NickName"],(int)dataReader["FaceId"]);item.Tag = this.fromUserId; // 将Id记录在Tag属性中sbFriends.Groups[1].Items.Add(item); // 向陌生人组中添加项}sbFriends.VisibleGroup = sbFriends.Groups[1]; // 设定陌生人组为可见组 }catch (Exception ex){error = true;Console.WriteLine(ex.Message);}finally{DBHelper.connection.Close();}// 出错了if (error){MessageBox.Show("服务器出现意外错误!", "抱歉", MessageBoxButtons.OK, MessageBoxIcon.Error);}}}}(资料素材和资料部分来自网络,供参考。