简单的实现QQ通信功能(三)

第三部分:登陆界面的设计及代码

一:效果图及界面设计

1. 效果图:

2. 界面设计:

(1)仿照QQ的登陆界面,右上角放了三个Label,用来做关闭、最小化和设置,使用了它们的Click事件当做按钮用。

(2)上面是一个pictureBox放一个图片。

(3)下面用tableLayoutPanel布局。

(4)tableLayoutPanel左侧图片和图片右下角的在线图放在一个Panel里,这个Panel占3行。

(5)用户名用ComboBox,密码框用TextBox,登陆用了个Button。

(6)用到的各个控件的Name:

关闭按钮:closewindow,最小化按钮:smallwindow,上面的大图片:pictureBox1,状态图标:zhuangtai;

用户名框:combuid,密码框:textpwd,登陆按钮:btnlogin,放左右两个图片imageList1;

右键菜单:contextMenuStrip1,右键菜单里用到的图片:imageList2。

二.:代码设计:

        //记录更改状态,默认为1是在线
        int zt = 1;

        //记录登录者的变量
        private  string uid;

        public  string Uid
        {
            get { return uid; }
            set { uid = value; }
        }

        public Login()
        {
            InitializeComponent();
        }
         //界面加载
        private void Login_Load(object sender, EventArgs e)
        {
            //设置透明,需要先在设计中将要透明控件的backcolor设置为Transparent
            shezhi.Parent = this.pictureBox1;
            smallwindow.Parent = this.pictureBox1;
            closewindow.Parent = this.pictureBox1;
            zhuangtai.Parent = this.pictureBox2;
            //设置左右两个图片
            pictureBox3.Image = imageList1.Images[0];
            pictureBox4.Image = imageList1.Images[1];

        }//关闭窗口按钮
        private void closewindow_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        //关闭按钮鼠标放上去变色
        private void closewindow_MouseEnter_1(object sender, EventArgs e)
        {
            closewindow.BackColor = Color.LightCoral;
        }
        //关闭按钮鼠标离开恢复颜色
        private void closewindow_MouseLeave_1(object sender, EventArgs e)
        {
            closewindow.BackColor = Color.Transparent;
        }
        //最小化按钮最小化
        private void smallwindow_Click_1(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }

        //实现鼠标点在上面大图片上拖动窗体的代码
        int x;
        int y;

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            x = e.X;
            y = e.Y;
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                this.Left = this.Left + (e.X - x);
                this.Top = this.Top + (e.Y - y);
            }
        }
        //密码框获得焦点时改为密码框,清空,字体颜色变化
        private void textpwd_Enter(object sender, EventArgs e)
        {
            textpwd.Text = "";
            textpwd.ForeColor = Color.Black;
            textpwd.PasswordChar = Convert.ToChar("●");
        }
        //用户名框鼠标点进去时,清空,字体颜色变化
        private void combuid_MouseDown_1(object sender, MouseEventArgs e)
        {
            combuid.Text = "";
            combuid.ForeColor = Color.Black;
        }
                //登录按钮按下时
        private void btnlogin_Click_1(object sender, EventArgs e)
        {
        //取用户名密码,查询数据库
            string uid = combuid.Text.ToString();
            string pwd = textpwd.Text.ToString();
            UsersTableAdapter adp = new UsersTableAdapter();
            qqdata.UsersDataTable table = adp.LoginCheck(uid,pwd);
            //判断登录是否成功
            if (table.Rows.Count > 0)
            {
                //成功之后this.DialogResult设为OK
                this.DialogResult = DialogResult.OK;
                Uid = table[0].UserName; //将用户名传到Uid
                adp.UpdateStateByCode(zt, uid); //将状态更改
                adp.UpdateLasttimeByCode(DateTime.Now, uid); //将登录时间记录
            }
            else
            {
                MessageBox.Show("账号密码错误!");
            }
        }

       //头像右下角图标点击的时候弹出右键菜单

private void zhuangtai_Click_1(object sender, EventArgs e)
{
contextMenuStrip1.Show(zhuangtai, 0, 18);
}

       //右键菜单选择在线的时候

private void 在线ToolStripMenuItem_Click(object sender, EventArgs e)
{
zhuangtai.Image = imageList2.Images[3];
zt = Convert.ToInt32(在线ToolStripMenuItem.Tag);
}

      //右键菜单选择隐身的时候

private void 隐身ToolStripMenuItem_Click(object sender, EventArgs e)
{
zhuangtai.Image = imageList2.Images[2];
zt = Convert.ToInt32(隐身ToolStripMenuItem.Tag);
}

      //右键菜单选择忙碌的时候

private void 忙碌ToolStripMenuItem_Click(object sender, EventArgs e)
{
zhuangtai.Image = imageList2.Images[1];
zt = Convert.ToInt32(忙碌ToolStripMenuItem.Tag);
}

      //右键菜单选择离开的时候

private void 离开ToolStripMenuItem_Click(object sender, EventArgs e)
{
zhuangtai.Image = imageList2.Images[0];
zt = Convert.ToInt32(离开ToolStripMenuItem.Tag);
}

 
时间: 2024-10-20 10:34:23

简单的实现QQ通信功能(三)的相关文章

简单的实现QQ通信功能(二)

第二部分:功能需求以及大体思路 一:功能需求: 1. 角色:登录用户. 2. 登录: (1)检查用户名和密码是否正确,正确登录成功,否则提醒用户名或密码错误. (2)登录时可以选择登录状态,送入数据库. (3)记录登录时间,送入数据库. 3. 登录成功之后显示所有的好友信息: (1)分类列出所有好友的信息(带头像). (2)如果有未读的信息,则给提示. (3)来新消息提醒. 4. 主界面功能: (1)显示登录者自己的信息. (2)可以修改自己的状态. (3)最小化之后在右下角显示小图标,双击小图

简单的实现QQ通信功能(四)

第四部分:主界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)上面显示自己信息用一个PictureBox和两个Label,用来显示自己的头像和昵称备注名. (2)下面用了一个FlowLayoutPanel来显示好友列表,FlowDirection设置为TopDown,从上到下流式布局. (3)下面一个ComboBox用来选择自己的状态. (4)一个imageList3存放用户头像,根据登录者的头像代号进来选择需要的头像. (5)一个notifyIcon1来设置任务栏

简单的实现QQ通信功能(一)

第一部分:数据库的设计,数据集的建立 一:数据库的设计: 1.用户表:包含用户名.密码.昵称.性别.备注.状态.头像代号和最后登录时间. 2.朋友关系表:自增长列为主键列,用户名和好友名,还有朋友的状态. 3.聊天内容表:自增长列为主键列,发送者和接收者,中间有聊天内容和发送时间,还有一个标记未读已读的状态. 4. 用户状态表:用户状态表主要是有用户状态和状态名字. 5. SQL数据库内用用查询建立这几个表: use mydb go create table Users ( UserName v

简单的实现QQ通信功能(五)

第五部分:聊天界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)左上角显示朋友的头像和“某某正在和某某聊天”. (2)中间的聊天窗口用了一个ListView,视图用详细信息Details,设置了一列用来显示主项,只用了其中的主项(里面加载头像和需要显示的信息及消息内容),没有设置子项信息. (3)TextBox用来写消息. (4)一个发送的Button. (5)界面用Dock布局. (6)imageList1里面放用户的ico图标,imageList2放用户头像,时

经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能

说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后,给出自己的理解和解决方案,不一定是正确的,但这些方法的确可以解决问题. 如果有人遇到同样的问题,并且看到我的文章解决,那是我的荣幸. !!!!!!但特别需要说明的是,看的越多,不明白的越多,我的看法可能是完全错误的,这些方法只是暂时解决了我的问题, !!!!!!如果有人发现了我的错误,请私信或评论告

Android借用QQ开放平台,简单实现联系客服功能

公司做的电商APP,现在要加入联系客服功能,起初想的是做一个即时聊天系统,以前没做过,这两天开始恶补,后来需求变了,改成调用QQ开放平台,做一个临时会话就行了,这就省了不少力气,也不需要再去组件服务端了. 步骤: 1.引用QQ SDK源码文件. 创建一个工程,并把open-sdk.jar文件和mta_sdk_x.x.x.jar文件拷贝到libs(或lib)目录下,如下图所示: 选中open-sdk.jar和mta_sdk_x.x.x.ja,右键菜单中选择Build Path, 选择Add to 

QQ 通信原理分析(转)

之前写过一个简单的IM,当时遇到过各种令人崩溃的问题:事后也没有做很好的总结,现在看到这篇文章,感慨良多,特此转摘过来,以做备忘. 出处:http://blog.csdn.net/lxnkobe/article/details/7521331 下面有4个基本的问答: 问题一:为什么只要可以连上互联网的计算机都可以用QQ相互建立通信,而不需要固定IP?也就是这个QQ用户端是怎样找到另一个QQ用户的,而用户在每次使用时他可能用的是不同的计算机,有着不同的IP地址.服务器端不会以qq用户端的ip作为唯

QQ通信机制(转)

下面有4个基本的问答: 问题一:为什么只要可以连上互联网的计算机都可以用QQ相互建立通信,而不需要固定IP?也就是这个QQ用户端是怎样找到另一个QQ用户的,而用户在每次使用时他可能用的是不同的计算机,有着不同的IP地址. 服务器端不会以qq用户端的ip作为唯一标识,服务器端会以qq账号作为唯一标识,所以这个账号肯定是唯一的,一个账号登陆时每次都可以有不同的ip地址,但账号却相同,当账号a登陆服务器,服务器会记录下账号a的ip地址,去通知a的好友,告诉他们,a上线了和现在的ip地址,a的好友就可以

jsp+servlet+mysql 实现简单的银行登录转账功能

jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从一个登录页面开始(利用表单提交,action="jsp实现页面")第一步:在(mysql)数据库中建表:建立一个用户的基本信息表(用户姓名,密码,账户余额),用户转账(用户名,转账金额)的操作表第二步:登录页面:输入用户名和密码对数据库中的用户信息(login.jsp)进行验证(qq浏览器