📄 mainform.cs
字号:
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 MyQQ
{
/// <summary>
/// 登录后的主窗体
/// </summary>
public partial class MainForm : Form
{
int fromUserId; // 消息的发起者
int friendFaceId; // 发消息的好友的头像Id
int 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; // 消息状态
// 找出未读消息对应的好友Id
string 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)
{
// 获得发消息的人的头像Id
sql = "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;// 索引为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 == SbView.LargeIcon)
{
sbFriends.View = SbView.SmallIcon;
tsmiView.Text = "显示大头像";
}
else if (sbFriends.View == SbView.SmallIcon)
{
sbFriends.View = SbView.LargeIcon;
tsmiView.Text = "显示小头像";
}
}
// 删除好友
private void tsmiDelete_Click(object sender, EventArgs e)
{
DialogResult result; // 对话框结果
int deleteResult = 0; // 操作结果
if (sbFriends.SeletedItem != null)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -