⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.cs

📁 北大青鸟的教学程序
💻 CS
📖 第 1 页 / 共 2 页
字号:
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 + -