C#实现QQ(高仿版)聊天窗口

C#实现QQ(高仿版)聊天窗口一.编程思想(1).考虑聊天功能的实现,文本的获取以及显示;(2).窗体制作时需要的控件;(3).考虑是否可以发送空格以及空字符;(4).刚开始进入界面时焦点的位置;(5).获取输入内容鼠标光标跟踪最后一个字符处;(6).窗口抖动依赖位置的变化进行实现;(6).点击按钮对应的触发事件;二.代码的实现1.需要的控件简介:TextBox:允许用户输入文本,并提供多行编辑和密码字符掩……

大家好,又见面了,我是你们的朋友全栈君。

一.编程思想

(1).考虑聊天功能的实现,文本的获取以及显示;
(2).窗体制作时需要的控件;
(3).考虑是否可以发送空格以及空字符;
(4).刚开始进入界面时焦点的位置;
(5).获取输入内容鼠标光标跟踪最后一个字符处;
(6).窗口抖动依赖位置的变化进行实现;
(6).点击按钮对应的触发事件;

二.代码的实现

1.需要的控件简介:

TextBox:允许用户输入文本,并提供多行编辑和密码字符掩码功能;

Button:当用户单击它时引发事件;

Timer:按用户定义的间隔引发事件的组件

2.窗体加载时完成事件
        private void 聊天窗口_Load(object sender, EventArgs e)
        { 
   
            //设置窗体在桌面的位置
            this.Left = Screen.PrimaryScreen.Bounds.Width / 2 - this.Width / 2;
            this.Top = Screen.PrimaryScreen.Bounds.Height / 2 - this.Height / 2;
            textBox1.BackColor = Color.SkyBlue;//设置textbox1的颜色
            textBox2.BackColor = Color.GreenYellow;//设置textbox2的颜色
            this.BackColor = Color.Black;//设置窗体的颜色
            //设置按钮的文本
            button1.Text = "发送";
            button2.Text = "抖动";
            button3.Text = "关闭";
            textBox1.ReadOnly = true;//设置输出为仅读
            this.Opacity = 0.4;//设置不透明度
        }
3.点击发送按钮时的代码,要设置不能发送空内容,并且获取焦点,设置发送时显示的发送人以及当前时间和输入的内容
 private void button1_Click(object sender, EventArgs e)
        { 
   
            //设置文本内容不为空字符以及不能为空格
            if (textBox2.Text.Trim() == "")//移除所有空白前导字符以及尾部字符
            { 
   
                this.textBox2.Text = "";//设置为空
                this.textBox2.Focus();//获取焦点
                MessageBox.Show("发送内容不能为空,请至少包含一个字符!");
            }
            //第二种方法
            //if (string.IsNullOrWhiteSpace(textBox2.Text))//指示指定的字符串是null,空还是仅有空白字符组成
            //{ 
   
            // this.textBox2.Text = "";
            // this.textBox2.Focus();
            // MessageBox.Show("发送内容不能为空,请至少包含一个字符!");
            //}
            else { 
   
                //获取textbox2内容在textbox1显示
                textBox1.Text +="\r\n" + "{借愁哥哥(1848514604)}" + DateTime.Now + "\r\n" + "\r\n" + textBox2.Text + "\r\n";//设置发送时显示的发送人以及当前时间和输入的内容
                textBox2.Text = "";
                this.textBox2.Focus();//为textbox2设置焦点
            }
        }
4.设置窗体的抖动
 private void button2_Click(object sender, EventArgs e)
        { 
   
           int x= this.Left;
           int y= this.Top;
            //第一种方法timer解决
            //for (int i = 0; i < 10; i++)
            //{ 
   
            // this.Location = new Point(x,y);
            // this.Location = new Point(x-5,y);
            // this.Location = new Point(x-5,y-5);
            // this.Location = new Point(x,y-5);
            // this.Location = new Point(x+5,y-5);
            // this.Location = new Point(x+5,y);
            // this.Location = new Point(x+5,y+5);
            // this.Location = new Point(x,y+5);
            // this.Location = new Point(x-5,y+5);
            // this.Location = new Point(x-5,y);
            // this.Location = new Point(x,y);
            //}
            //第二种方法之4个点
            //for (int i = 0; i < 10; i++)
            //{ 
   
            // this.Location = new Point(x+10,y);
            // Thread.Sleep(100);
            // this.Location = new Point(x+10,y+10);
            // Thread.Sleep(100);
            // this.Location=new Point(x,y+10);
            // Thread.Sleep(100);
            // this.Location = new Point(x, y);
            // Thread.Sleep(100);
            //}
            //第二种方法之9个点
            for (int i = 0; i < 10; i++)
            { 
   
                this.Location = new Point(x,y);
                Thread.Sleep(10);
                this.Location = new Point(x+10, y);
                Thread.Sleep(10);
                this.Location = new Point(x+10, y+10);
                Thread.Sleep(10);
                this.Location = new Point(x, y+10);
                Thread.Sleep(10);
                this.Location = new Point(x-10, y+10);
                Thread.Sleep(10);
                this.Location = new Point(x-10, y);
                Thread.Sleep(10);
                this.Location = new Point(x-10, y-10);
                Thread.Sleep(10);
                this.Location = new Point(x, y-10);
                Thread.Sleep(10);
                this.Location = new Point(x+10, y-10);
                Thread.Sleep(10);
                this.Location = new Point(x+10, y);
                Thread.Sleep(10);
                this.Location = new Point(x, y);
                Thread.Sleep(10);
            }
            textBox1.Text+= "\r\n" + "{借愁哥哥(1848514604)}" + DateTime.Now + "\r\n" + "\r\n" + "对方向您发送了一条抖动消息" + "\r\n";
            textBox2.Focus();//获取焦点
        }
5.关闭按钮的设计
 private void button3_Click(object sender, EventArgs e)
        { 
   
            
            this.Close();//关闭此窗体
        }
6.textbox1的设计
 private void textBox1_TextChanged_1(object sender, EventArgs e)
        { 
   
            //设置光标定位
            this.textBox1.Focus();//为控件设置焦点
            this.textBox1.Select(this.textBox1.TextLength, 0);//选择文本框中的文本范围,textlength为获取控件中文本长度
            this.textBox1.ScrollToCaret();//将控件内容滚动到当前插入符号位置
        }
6.textbox2的设计
 private void textBox2_TextChanged_1(object sender, EventArgs e)
        { 
   
            //设置textbox颜色
            Random n = new Random();
            textBox2.ForeColor = Color.FromArgb(n.Next(0, 255), n.Next(0, 255), n.Next(0, 255));
            //textBox1.BackColor = textBox2.ForeColor;
            this.Text = "正在输入...";
        }

三.其他控件也可自加,看最终效果:

在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161482.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库dml和ddl有什么区别(mysql是一种)

    DBMS中DDL和DML有哪些区别发布时间:2020-12-0312:07:24来源:亿速云阅读:119作者:小新这篇文章主要介绍DBMS中DDL和DML有哪些区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是DDL?DDL代表数据定义语言,它定义了数据库结构或数据库模式,可以将数据库中定义的数据的其他属性定义为属性域;还提供了指定一些约束以保持数据一致性的工具。D…

    2022年4月17日
    121
  • SpringBoot 配置之: 阿里druid数据库连接池 com.alibaba.druid.pool.DruidDataSource 报红「建议收藏」

    SpringBoot 配置之: 阿里druid数据库连接池 com.alibaba.druid.pool.DruidDataSource 报红「建议收藏」第一步在idea中使用官方的创建项目的工具,创建一个新项目。第二步自己添加数据源配置但是”com.alibaba.druid.pool.DruidDataSource”报红。到pom.xml中添加依赖<properties>…<druid.version>1.1.14</druid.version>……

    2022年7月23日
    82
  • 【Hibernate】uniqueResult方法「建议收藏」

    【Hibernate】uniqueResult方法「建议收藏」数据库中根据你的查询条件只会返回唯一结果,就可以用uniqueResult这个方法!否则就用list();其返回类型为Object uniqueResult()方法通常是在业务方法查询语句中用到的,比如(UsersRoles)getSession().createQuery(“selecturfromUsersRolesurwhereur.role.id=?andur.

    2022年9月10日
    0
  • MyEclipse10激活成功教程_MyEclipse激活码

    MyEclipse10激活成功教程_MyEclipse激活码myEclipse10可以去很多地方下载,我这里是从电脑管家下载的,下载完成后安装,安装很简单,不在多说安装完成后会发现你只有一个月的试用时间,我们就需要激活成功教程,这里需要下载一个激活成功教程补丁https://pan.baidu.com/s/1ivE2yauZRDdDq8zBxpK06A可以去网盘里下载,下载后解压,会有如下文件然后运行run.bat,会出现这个界面…

    2022年9月30日
    0
  • iphone4装android,iPhone4可安装Android实现双系统启动.pdf

    iphone4装android,iPhone4可安装Android实现双系统启动.pdfiPhone4可安装Android实现双系统启动iPhone4可安装Android实现双系统启动苹果的iOS以其封闭性而著称相比Android这种开放性系统iOS很难移植到其他设备上不过Android就已经成功的入侵到iPhone手机之中使用iPhoDroid工具就可以很容易的将iPhone变成一部iOS和Android双系统启动设备近…

    2022年7月26日
    6
  • 键盘钩子入门

    键盘钩子入门1钩子   钩子是操作系统消息处理的一种机制。通过钩子,应用程序可以安装一个钩子回调过程让系统调用,从而监视系统中的消息队列。在这些消息到达目标窗口之前对这些消息进行处理。1.1钩子函数1)钩子函数会降低操作系统的性能,因为它增加系统处理每一个消息的开销。所以用户除非必须才要安装钩子,而且还要尽可能早地去除钩子。2)操作系统支持多种类型的钩子,每种类型都提供了它特有的消息处理机制。3)对…

    2022年4月28日
    150

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号