C#语言实例源码系列-实现输入框焦点变色和窗体拖拽改变大小

news2025/1/16 14:47:05
专栏分享
  • 点击跳转=>Unity3D特效百例
  • 点击跳转=>案例项目实战源码
  • 点击跳转=>游戏脚本-辅助自动化
  • 点击跳转=>Android控件全解手册

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

在这里插入图片描述

👉实践过程

😜效果

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

😜代码

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void textBox1_Enter(object sender, EventArgs e)
    {
        ((TextBox) sender).BackColor = Color.CornflowerBlue;
    }

    private void textBox1_Leave(object sender, EventArgs e)
    {
        ((TextBox) sender).BackColor = Color.White;
    }

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyValue == 13)
        {
            int n = Convert.ToInt32(((TextBox) sender).Tag.ToString());
            Clear_Control(this.Controls, n, 6);
        }
    }

    #region 遍历指定的控件

    /// <summary>
    /// 遍历指定的控件
    /// </summary>
    /// <param Con="ControlCollection">可视化控件</param>
    /// <param n="int">控件标识</param>
    /// <param m="int">最大标识</param>
    public void Clear_Control(Control.ControlCollection Con, int n, int m)
    {
        int tem_n = 0;
        foreach (Control C in Con)
        {
            //遍历可视化组件中的所有控件
            if (C.GetType().Name == "TextBox") //判断是否为TextBox控件
            {
                if (n == m)
                    tem_n = 1;
                else
                    tem_n = n + 1;
                if (Convert.ToInt32(((TextBox) C).Tag.ToString()) == tem_n)
                    ((TextBox) C).Focus(); //清空当前控件
            }
        }
    }

    #endregion
}
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public static int Example_X = 0;
    public static int Example_Y = 0;
    public static int Example_W = 0;
    public static Point CPoint;

    #region 利用窗体上的控件移动窗体

    /// <summary>
    /// 利用控件移动窗体
    /// </summary>
    /// <param Frm="Form">窗体</param>
    /// <param e="MouseEventArgs">控件的移动事件</param>
    public void FrmMove(Form Frm, MouseEventArgs e) //Form或MouseEventArgs添加命名空间using System.Windows.Forms;
    {
        if (e.Button == MouseButtons.Left)
        {
            Point myPosittion = Control.MousePosition; //获取当前鼠标的屏幕坐标
            myPosittion.Offset(CPoint.X, CPoint.Y); //重载当前鼠标的位置
            Frm.DesktopLocation = myPosittion; //设置当前窗体在屏幕上的位置
        }
    }

    #endregion

    #region 获取鼠标的当前位置

    /// <summary>
    /// 获取鼠标的当前位置
    /// </summary>
    /// <param Frm="Form">窗体</param>
    /// <param e="MouseEventArgs">窗体上有关鼠标的一些信息</param>
    public void FrmScreen_SizeInfo(Form Frm, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            Example_X = e.X;
            Example_Y = e.Y;
            Example_W = Frm.Width;
        }
    }

    #endregion

    #region 改变窗体的大小(用于鼠标的移动事件)

    /// <summary>
    /// 改变窗体的大小(用于鼠标的移动事件)
    /// </summary>
    /// <param Frm="Form">窗体</param>
    /// <param Pan="Panel">设置窗体边框的控件</param>
    /// <param e="MouseEventArgs">窗体上有关鼠标的一些信息</param>
    public void FrmScreen_EnlargeSize(Form Frm, Panel Pan, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            switch (Pan.Name)
            {
                case "panel_Right": //如果移动的是窗体的右边框
                {
                    if (this.Width <= 70) //如果窗体的宽度小于等于70
                    {
                        Frm.Width = 70; //设置窗体的宽度为70
                        //如果用鼠标向右移动窗体的右边框
                        if (Cursor.Position.X - Frm.Left + (Pan.Width - Example_X) > Frm.Width)
                        {
                            //根据鼠标的移动值,增加窗体的宽度
                            Frm.Width = Cursor.Position.X - Frm.Left + (Pan.Width - Example_X);
                        }

                        break;
                    }

                    //根据鼠标的移动值,增加窗体的宽度
                    Frm.Width = Cursor.Position.X - Frm.Left + (Pan.Width - Example_X);
                    break;
                }
                case "panel_BR": //如果移动的是窗体的右下角
                {
                    //如果窗体的大小不为窗体大小的最小值
                    if (this.Width > 70 && this.Height > (panel_Title.Height + panel_Bn.Height + 1))
                    {
                        //根据鼠标的移动改变窗体的大小
                        Frm.Height = Cursor.Position.Y - Frm.Top + (Pan.Height - Example_Y);
                        Frm.Width = Cursor.Position.X - Frm.Left + (Pan.Width - Example_X);
                    }
                    else
                    {
                        if (this.Width <= 70) //如果窗体的宽度小于等于最小值
                        {
                            Frm.Width = 70; //设置窗体的宽度为70
                            if (this.Height <= (panel_Title.Height + panel_Bn.Height + 1)) //如果窗体的高小于最小值
                            {
                                Frm.Height = panel_Title.Height + panel_Bn.Height + 1; //设置窗体的最小高度
                                //如果用鼠标向下移动窗体的底边框
                                if (Cursor.Position.Y - Frm.Top + (Pan.Height - Example_Y) > Frm.Height)
                                {
                                    //根据鼠标的移动值,增加窗体的高度
                                    Frm.Height = Cursor.Position.Y - Frm.Top + (Pan.Height - Example_Y);
                                }

                                break;
                            }

                            //如果用鼠标向右移动窗体
                            if (Cursor.Position.X - Frm.Left + (Pan.Width - Example_X) > Frm.Width)
                            {
                                //增加窗体的宽度
                                Frm.Width = Cursor.Position.X - Frm.Left + (Pan.Width - Example_X);
                            }

                            break;
                        }

                        if (this.Height <= (panel_Title.Height + panel_Bn.Height + 1)) //如果窗体的高度小于等于最小值
                        {
                            Frm.Height = panel_Title.Height + panel_Bn.Height + 1; //设置窗体的高度为最小值
                            Frm.Width = Cursor.Position.X - Frm.Left + (Pan.Width - Example_X); //改变窗体的宽度
                            //如果用鼠标向下移动窗体的边框
                            if (Cursor.Position.Y - Frm.Top + (Pan.Height - Example_Y) > Frm.Height)
                            {
                                Frm.Height = Cursor.Position.Y - Frm.Top + (Pan.Height - Example_Y); //增加窗体的高度
                            }

                            break;
                        }
                    }

                    break;
                }
                case "panel_Bn": //如果移动的是窗体的底边框
                {
                    if (this.Height <= (panel_Title.Height + panel_Bn.Height + 1)) //如果窗体的高度小于等于最小值
                    {
                        Frm.Height = panel_Title.Height + panel_Bn.Height + 1; //设置窗体的高度为最小值
                        //如果用鼠标向下移动窗体的下边框
                        if (Cursor.Position.Y - Frm.Top + (Pan.Height - Example_Y) > Frm.Height)
                        {
                            Frm.Height = Cursor.Position.Y - Frm.Top + (Pan.Height - Example_Y); //增加窗体的高度
                        }

                        break;
                    }

                    Frm.Height = Cursor.Position.Y - Frm.Top + (Pan.Height - Example_Y); //增加窗体的高度
                    break;
                }
            }
        }
    }

    #endregion

    private void panel_Right_MouseDown(object sender, MouseEventArgs e)
    {
        FrmScreen_SizeInfo(this, e); //获取鼠标的当前位置
    }

    private void panel_Right_MouseMove(object sender, MouseEventArgs e)
    {
        FrmScreen_EnlargeSize(this, (Panel) sender, e); //改变窗体的大小
    }

    private void pictureBox1_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void panel_TitL_MouseDown(object sender, MouseEventArgs e)
    {
        int Tem_X = -e.X;
        if (Convert.ToInt16(((Panel) sender).Tag.ToString()) == 2) //如果移动的是标题栏的中间部分
            Tem_X = -e.X - panel_TitL.Width;
        if (Convert.ToInt16(((Panel) sender).Tag.ToString()) == 3) //如果移动的是标题栏的尾端
            Tem_X = -(this.Width - ((Panel) sender).Width) - e.X;
        CPoint = new Point(Tem_X, -e.Y);
    }

    private void panel_TitL_MouseMove(object sender, MouseEventArgs e)
    {
        FrmMove(this, e);
    }
}

需要的再直接Call我,直接发。

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

002.组合总和|||——回溯算法

1.题目链接&#xff1a; 216. 组合总和 III 2.解题思路&#xff1a; 2.1.题目要求&#xff1a; 给一个元素数量k和一个元素和n&#xff0c;要求从范围[1,2,3,4,5,6,7,8,9]中返回所有元素数量为k和元素和为n的组合。&#xff08;每个数字只能使用一次&#xff09; 比如输入k…

深度学习快速入门----Pytorch 系列2

注&#xff1a;参考B站‘小土堆’视频教程 视频链接&#xff1a;【PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆】 上一篇&#xff1a;深度学习快速入门----Pytorch 1 文章目录八、神经网络--非线性激活九、神经网络--线性层及其他层…

作为IT行业过来人,我有3个重要建议给后辈程序员!

见字如面&#xff0c;我是军哥&#xff01;作为一名 40 岁的 IT 老兵&#xff0c;我在年轻时踩了不少坑&#xff0c;我总结了其中最重要的 3 个并一次性分享给你&#xff0c;文章不长&#xff0c;你一定要看完哈&#xff5e;1、重视基础还不够&#xff0c;还要注重技术广度和深…

第2-4-8章 规则引擎Drools实战(1)-个人所得税计算器

文章目录9. Drools实战9.1 个人所得税计算器9.1.1 名词解释9.1.2 计算规则9.1.2.1 新税制主要有哪些变化&#xff1f;9.1.2.2 资较高人员本次个税较少&#xff0c;可能到年底扣税增加&#xff1f;9.1.2.3 关于年度汇算清缴9.1.2.4 个人所得税预扣率表&#xff08;居民个人工资、…

科教导刊杂志科教导刊杂志社科教导刊编辑部2022年第27期目录

前沿视角《科教导刊》投稿&#xff1a;cn7kantougao163.com 新时代研究生教育质量评价指标体系的框架构建 李军伟;赵永克;杨丹; 1-3 基于现代学徒制的“多主体、双标准、五维度”人才培养质量评价体系构建 汪帆;刘严; 4-6 高教论坛 新工科背景下地方性院校第二课堂…

【云原生】Docker容器服务更新与发现之consul

内容预知 1.consul的相关知识 1.1 什么是注册与发现 1.2 什么是consul 1.3 zookeeper和consul的区别 2. consul 部署 2.1 部署consul服务器 2.2 registrator服务器 3.consul-template 的引入 3.1 consul-template的作用 3.2 consul-template的具体部署运用 &…

微信开发者工具C盘占用大的问题

将User Data 下的文件迁移到其他盘&#xff0c;比如 D盘&#xff0c;E盘&#xff0c;F盘 步骤如下&#xff1a; 1.找到微信开发者工具C盘所在的缓存目录&#xff0c;一般为 C:\Users\ 你的用户名\AppData\Local\微信开发者工具\User Data 将里面的内容全部剪切到其它盘符&…

从鹅厂实例出发!分析Go Channel底层原理

本文是基于Go1.18.1源码的学习笔记。Channel的底层源码从Go1.14到现在的Go1.19之间几乎没有变化&#xff0c;这也是Go最早引入的组件之一&#xff0c;体现了Go并发思想&#xff1a;Do not communicate by sharing memory; instead, share memory by communicating.不要通过共享…

Playwright 简明入门教程:录制自动化测试用例,结合 Docker 使用

本篇文章聊聊如何使用 Playwright 进行测试用例的录制生成&#xff0c;以及如何在Docker 容器运行测试用例&#xff0c;或许是网上最简单的入门教程。 写在前面 Playwright 是微软出品的 Web 自动化测试工具和框架&#xff0c;和 Google Puppeteer 有着千丝万缕的关系。前一阵…

[附源码]计算机毕业设计springboot儿童早教课程管理系统论文2022

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

如何治理 Electron 版本淘宝直播应用崩溃?

经过几个月的努力&#xff0c;基于Electron框架开发的新版淘宝直播推流软件终于上线了。随之而来的就是线上用户反馈的各种问题&#xff0c;其中最影响用户体验的当属应用崩溃问题了。当应用程序出现未 catch 的异常时就会发生崩溃&#xff0c;本文介绍了客户端应用崩溃的处理流…

javaSE - Arrays - 数组的定义与使用

一、数组基本用法 1.1、什么是数组 数组本质上就是让我们能 “批量” 创建相同类型的变量 也可以说是存储一组相同数据类型的数据的集合 如: 如果需要表示两个数据, 那么直接创建两个变量即可 int a; int b 如果需要表示五个数据, 那么可以创建五个变量 int a1; int a2; int …

uni-app入门:自定义组件实现父子组件参数传递

1.属性绑定:父组件传递参数到子组件 2.事件绑定:子组件传递参数到父组件 3.获取组件对象实例:父组件获取子组件实例对象进行参数传递 1.属性绑定:父组件传递参数到子组件首先交代一下基本的项目信息:主页面为index.wxml,创建test子组件,文件目录:component/test/test…

惠柏新材创业板IPO过会:上半年营收9.3亿 拟募资3.4亿

雷递网 雷建平 11月28日惠柏新材料科技&#xff08;上海&#xff09;股份有限公司&#xff08;简称&#xff1a;“惠柏新材”&#xff09;日前IPO过会&#xff0c;准备在深交所创业板上市。惠柏新材计划募资3.42亿元&#xff0c;其中&#xff0c;1.8亿元用于上海帝福3.7万吨纤维…

xss-labs/level9

这一关界面感觉跟上一关很像 所以我们注入上一关的为编码的答案 javascript:alert(xss) 没能弹窗 查看源代码 他说我输入的链接不合法 我压根没有输入链接 我觉得后台应该是做了一个条件的判断 应该是要有链接才会在第二处输出点回显我们的输入 根据上面的猜测 我们构造如下…

网络的根基

hi 大家好&#xff0c;上个周末带小伙伴&#xff0c;一起复习了一遍网络协议&#xff0c;对网络协议的核心知识进行梳理&#xff0c;希望大家早日掌握这些核心知识&#xff0c;打造自己坚实的基础&#xff0c;为自己目标慢慢积累&#xff0c;等到自己春天的到来。详细点击查看…

设计模式学习笔记

文章目录23种设计模式学习笔记1.创建型模式1 单例模式2 工厂模式3 抽象工厂模式4 建造者模式5 原型模式2.结构型模式6 代理模式7 适配器模式8 桥接模式9 装饰模式10 外观模式11 组合模式12 享元模式3.行为型模式13 策略模式14 观察者模式15 责任链模式16 模板模式17 状态模式18…

Maven程序 tomcat插件安装与web工程启动

第一步&#xff1a;在mvnrepository库中找到tomcat插件 1.打开mvnrepository官网&#xff0c;搜索“tomcat maven”向下滑动找到“org.apache.tomcat.maven ”点进去 2.在这里点第一个“Apache Tomcat Maven Plugin :: Tomcat 7.x” 3.在这里选择2.1版本相对来说比较稳定 4.复…

jsp393学生宿舍管理系统mysql

两个权限 管理员和 学生 1. 学生信息管理 添加学生信息&#xff08;学生号&#xff0c;姓名 院系 班级入学日期 &#xff09;修改学生信息 学生退宿舍&#xff08;可以删除指定的学生也可以成批删除&#xff09; 2. 宿舍信息管理 宿舍的基本信息&#xff08;公寓数 宿舍…

DSP-数字滤波器的结构

目录 基本结构块: 例&#xff1a; 一些特殊结构&#xff1a; 无延时回路问题&#xff1a; 规范和非规范结构&#xff1a; 等效结构&#xff1a; FIR滤波器的基本结构 &#xff1a; 直接型&#xff1a; 级联型&#xff1a; 多相型: 线性相位FIR结构: 基本IIR滤波器结…