QQ代码.docx
《QQ代码.docx》由会员分享,可在线阅读,更多相关《QQ代码.docx(85页珍藏版)》请在冰豆网上搜索。
![QQ代码.docx](https://file1.bdocx.com/fileroot1/2023-4/28/618cbf65-e32f-4dda-883d-d9e6bed8fe84/618cbf65-e32f-4dda-883d-d9e6bed8fe841.gif)
QQ代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingAptech.UI;
usingSystem.Data.SqlClient;
usingSystem.Media;
namespaceMyQQProgram
{
///
///登录主窗体
///
publicpartialclassMainForm:
Form
{
intfromUserId; //消息的发起者
intfriendFaceId;//发消息的好友的头像Id
intmessageImageIndex=0;//工具栏中的消息图标的索引
publicMainForm()
{
InitializeComponent();
}
privatevoidMainForm_Load(objectsender,EventArgse)
{
//工具栏的消息图标
tsbtnMessageReading.Image=ilMessage.Images[0];
//显示个人的信息
ShowSelfInfo();
//添加SideBar的两个组
sbFriends.AddGroup("我的好友");
sbFriends.AddGroup("陌生人");
//向我的好友组中添加我的好友列表
ShowFriendList();
}
#region"cmsFriendList控件部分"
//显示大、小头像视图切换
privatevoidtsmiView_Click(objectsender,EventArgse)
{
if(sbFriends.View==SbView.LargeIcon)
{
sbFriends.View=SbView.SmallIcon;
tsmiView.Text="显示大头像";
}
elseif(sbFriends.View==SbView.SmallIcon)
{
sbFriends.View=SbView.LargeIcon;
tsmiView.Text="显示小头像";
}
}
//删除好友
privatevoidtsmiDelete_Click(objectsender,EventArgse)
{
DialogResultresult;//对话框结果
intdeleteResult=0;//操作结果
if(sbFriends.SeletedItem!
=null)
{
result=MessageBox.Show("确实要删除该好友吗?
","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if(result==DialogResult.Yes)//确认删除
{
if(sbFriends.VisibleGroup==sbFriends.Groups[0])
{
DBHelper.connection.Open();
stringsql=string.Format("DELETEFROMFriendsWHEREHostId={0}ANDFriendId={1}",UserHelper.loginId,Convert.ToInt32(sbFriends.SeletedItem.Tag));
SqlCommandcmd=newSqlCommand(sql,DBHelper.connection);
intresults=-1;
try
{
results=Convert.ToInt32(cmd.ExecuteScalar());
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
finally
{
DBHelper.connection.Close();
}
if(deleteResult==1)
{
MessageBox.Show("好友已删除","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
sbFriends.SeletedItem.Parent.Items.Remove(sbFriends.SeletedItem);
}
}
else
{
MessageBox.Show("好友已删除","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
sbFriends.SeletedItem.Parent.Items.Remove(sbFriends.SeletedItem);
}
}
}
}
//将选中的人加为好友
privatevoidtsmiAddFriend_Click(objectsender,EventArgse)
{
intresult=0;//操作结果
DBHelper.connection.Open();
stringsql=string.Format("INSERTINTOFriends(HostId,FriendId)VALUES({0},{1})",UserHelper.loginId,Convert.ToInt32(sbFriends.SeletedItem.Tag));
SqlCommandcmd=newSqlCommand(sql,DBHelper.connection);
result=Convert.ToInt32(cmd.ExecuteNonQuery());
if(result==1)
{
MessageBox.Show("添加成功!
","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
sbFriends.SeletedItem.Parent.Items.Remove(sbFriends.SeletedItem);
ShowFriendList();//更新好友列表
}
else
{
MessageBox.Show("添加失败,请稍候再试!
","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
#endregion
#region"tsOperation控件部分"
//显示个人信息窗体
privatevoidtsbtnPersonalInfo_Click(objectsender,EventArgse)
{
PersonInfoFormPersonInfoForm=newPersonInfoForm();
PersonInfoForm.mainForm=this;//将当前窗体本身传给个人信息窗体
PersonInfoForm.Show();
}
//显示查找好友窗体
privatevoidtsbtnSearchFriend_Click(objectsender,EventArgse)
{
SearchFriendFromsearchFriendForm=newSearchFriendFrom();
searchFriendForm.Show();
}
//点击更新好友列表
privatevoidtsbtnUpdateFriendList_Click(objectsender,EventArgse)
{
ShowFriendList();
}
//单击时显示请求好友消息窗体
privatevoidtsbtnMessageReading_Click(objectsender,EventArgse)
{
tmrAddFriend.Stop();//消息timer停止运行
//图片恢复正常
messageImageIndex=0;
tsbtnMessageReading.Image=ilMessage.Images[messageImageIndex];
//显示系统消息窗体
RequestFormrequestForm=newRequestForm();
requestForm.Show();
}
//退出
privatevoidtsbtnExit_Click(objectsender,EventArgse)
{
DialogResultresult=MessageBox.Show("确实要退出吗?
","操作确认",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if(result==DialogResult.Yes)
{
Application.Exit();
}
}
#endregion
//显示右键菜单时,控制哪些菜单不可见
privatevoidcmsFriendList_Opening(objectsender,CancelEventArgse)
{
//如果没有选中的项
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;
}
}
//双击一项,弹出聊天窗体
privatevoidsbFriends_ItemDoubleClick(SbItemEventArgse)
{
//消息timer停止运行
if(tmrChatRequest.Enabled==true)
{
tmrChatRequest.Stop();
e.Item.ImageIndex=this.friendFaceId;
}
//显示聊天窗体
ChatFormchatForm=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();
}
//可见组发生变化时,发出声音
privatevoidsbFriends_VisibleGroupChanged(SbGroupEventArgse)
{
SoundPlayerplayer=newSoundPlayer("folder.wav");
player.Play();
}
#region"三个计时器部分"
//定时扫描数据库,找到未读消息
privatevoidtmrMessage_Tick(objectsender,EventArgse)
{
ShowFriendList();//刷新好友列表
intmessageTypeId=1;//消息类型
intmessageState=1;//消息状态
DBHelper.connection.Open();
//找出未读消息对应的好友Id
stringsql=string.Format(
"SELECTTop1FromUserId,MessageTypeId,MessageStateFROMMessagesWHEREToUserId={0}ANDMessageState=0",UserHelper.loginId);
//消息有两种类型:
聊天消息、添加好友消息
SqlCommandcomm=newSqlCommand(sql,DBHelper.connection);
SqlDataReaderdataReader=comm.ExecuteReader();
//循环读出一个未读消息
while(dataReader.Read())
{
this.fromUserId=(int)dataReader["FromUserId"];
messageTypeId=(int)dataReader["MessageTypeId"];
messageState=(int)dataReader["MessageState"];
}
dataReader.Close();
//判断消息类型,如果是添加好友消息,就启动喇叭timer,让小喇叭闪烁
if(messageTypeId==2&&messageState==0)
{
SoundPlayerplayer=newSoundPlayer("system.wav");
player.Play();
tmrAddFriend.Start();
}
//如果是聊天消息,就启动聊天timer,让好友头像闪烁
elseif(messageTypeId==1&&messageState==0)
{
//获得发消息的人的头像Id
sql="SELECTFaceIdFROMUsersWHEREId="+this.fromUserId;
this.friendFaceId=Convert.ToInt32(comm.ExecuteScalar());//设置发消息的好友的头像索引
//如果发消息的人没有在列表中就添加到陌生人列表中
if(!
HasShowUser(fromUserId))
{
UpdateStranger(fromUserId);
}
SoundPlayerplayer=newSoundPlayer("msg.wav");
player.Play();
tmrChatRequest.Start();//启动闪烁头像定时器
}
DBHelper.connection.Close();
}
//控制喇叭闪烁
privatevoidtmrAddFriend_Tick(objectsender,EventArgse)
{
//反复修改它的图像
messageImageIndex=messageImageIndex==0?
1:
0;
tsbtnMessageReading.Image=ilMessage.Images[messageImageIndex];
}
//让相应的好友头像闪烁
privatevoidtmrChatRequest_Tick(objectsender,EventArgse)
{
//循环好友列表两个组中的每个item,找到发消息的好友,让他的头像闪烁
for(inti=0;i<2;i++)
{
for(intj=0;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;//索引为100的图片是一个空白图片
}
else
{
sbFriends.Groups[i].Items[j].ImageIndex=this.friendFaceId;
}
sbFriends.Invalidate();//重新绘制
}
}
}
}
#endregion
///
///登录后显示个人的信息
///
publicvoidShowSelfInfo()
{
stringnickName="";//昵称
intfaceId=0;//头像索引
//取得当前用户的昵称、头像
if(DBHelper.connection.State==ConnectionState.Closed)
{
DBHelper.connection.Open();
}
stringsql=string.Format("SELECTNickName,FaceIdFROMUsersWHEREId={0}",UserHelper.loginId);
SqlCommandcomm=newSqlCommand(sql,DBHelper.connection);
SqlDataReaderdataReader=comm.ExecuteReader();
if(dataReader.Read())
{
if(!
(dataReader["NickName"]isDBNull))//判断数据库类型是否为空
{
nickName=Convert.ToString(dataReader["NickName"]);
}
faceId=Convert.ToInt32(dataReader["FaceId"]);
}
dataReader.Close();
//在窗体标题显示登录的昵称、号码
this.Text=UserHelper.loginId.ToString();
this.picFace.Image=ilFaces.Images[faceId];
this.lblLoginId.Text=string.Format("{0}({1})",nickName,UserHelper.loginId.ToString());
DBHelper.connection.Close();
}
///
///向我的好友组中添加我的好友列表
///
privatevoidShowFriendList()
{
//清空原来的列表
sbFriends.Groups[0].Items.Clear();
//查找有哪些好友
DBHelper.connection.Open();
stringsql=string.Format(
"SELECTFriendId,NickName,FaceIdFROMUsers,FriendsWHEREFriends.HostId={0}ANDUsers.Id=Friends.FriendId",
UserHelper.loginId);
SqlCommandcomm=newSqlCommand(sql,DBHelper.connection);
SqlDataReaderdataReader=comm.ExecuteReader();
//循环添加好友列表
while(dataReader.Read())
{
//创建一个SideBar项
SbItemitem=newSbItem((string)dataReader["NickName"],(int)dataReader["FaceId"]);
item.Tag=(int)dataReader["FriendId"];//将号码放在Tag属性中
//SideBar中的组可以通过数组的方式访问,按照添加的顺序索引从0开始
//Groups[0]表示SideBar中的第一个组,也就是“我的好友”组
sbFriends.Groups[0].Items.Add(item);//向SideBar的“我的好友”组中添加项
}
dataReader.Close();
DBHelper.connection.Close();
}
///
///判断发消息的人是否在列表中
///
privateboolHasShowUser(intloginId)
{
boolfind=false;//表示是否在当前显示出的用户列表中找到了该用户
//循环SideBar中的2个组,寻找发消息的人是否在列表中
for(inti=0;i<2;i++)
{
for(intj=0;j{
if(Convert.ToInt32(sbFriends.Groups[i].Items[j].Tag)==loginId)
{
find=true;
}
}
}
returnfind;
}
///
///更新陌生人列表
///
privatevoidUpdateStranger(intloginId)
{
DBHelper.connection.Open();
//选出这个人的基本信息
stringsql="SELECTNickName,FaceIdF