当前位置: 首页 > news >正文

C#自定义控件的放置与拖动

1、自定义控件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace PartApp.Uc
{public class And:Control{private bool dragging = false;private Point dragCursorPoint;private Point dragFormPoint;public And(){SetStyle(ControlStyles.OptimizedDoubleBuffer, true);this.MouseUp += And_MouseUp;this.MouseMove += And_MouseMove;this.MouseDown += And_MouseDown;}private void And_MouseDown(object sender, MouseEventArgs e){dragging = true;dragCursorPoint = Cursor.Position;dragFormPoint = this.Location;}private void And_MouseMove(object sender, MouseEventArgs e){if (dragging){Point dif = Point.Subtract(Cursor.Position, new Size(dragCursorPoint));this.Location = Point.Add(dragFormPoint, new Size(dif));}}private void And_MouseUp(object sender, MouseEventArgs e){dragging = false;}private double length = 40;[Browsable(true)][Category("Pin")][Description("引脚长度")]public double Length{get { return length; }set { length = value; }}private Size sensitive = new Size(10, 10);[Browsable(true)][Category("Pin")][Description("感应区")]public Size Sensitive{get { return sensitive; }set { sensitive = value; }}//边框线宽//框内字体类型//框内字体大小//引脚字体类型//引脚字体大小//文字缩进protected override void OnPaint(PaintEventArgs e){Width = 80; Height = 50;int indentation = 2;Graphics g = e.Graphics;g.SmoothingMode = SmoothingMode.HighQuality;int frameTop = Height / 10; //边框上边距int frameLeft = Sensitive.Width;g.DrawRectangle(new Pen(Color.Black, 5), frameLeft, frameTop, Width-2* frameLeft, Height-2* frameTop);g.FillRectangle(new SolidBrush(Color.AliceBlue), frameLeft, frameTop, Width - 2 * frameLeft, Height-2* frameTop);Font font = new Font("Arial", 10, FontStyle.Bold);SizeF size = g.MeasureString("&",font);g.DrawString("&", font, new SolidBrush(Color.Blue), (Width-size.Width)/2, (Height-size.Height)/2);int interval = Height / 5;int currentInterval = interval;font = new Font("Arial", 9, FontStyle.Regular);g.FillRectangle(new SolidBrush(Color.Blue), 0, currentInterval, Sensitive.Width, Sensitive.Height);g.DrawString("I1", font, new SolidBrush(Color.Blue), Sensitive.Width + indentation, currentInterval);currentInterval = 3*interval;g.FillRectangle(new SolidBrush(Color.Blue), 0, currentInterval, Sensitive.Width, Sensitive.Height);g.DrawString("I1", font, new SolidBrush(Color.Blue), Sensitive.Width+ indentation, currentInterval);currentInterval = 2 * interval;g.FillRectangle(new SolidBrush(Color.Blue), Width- frameLeft, currentInterval, Sensitive.Width, Sensitive.Height);size = g.MeasureString("O1", font);g.DrawString("O1", font, new SolidBrush(Color.Blue), Width - Sensitive.Width- indentation-size.Width, currentInterval);}}
}

2、应用

using PartApp.Uc;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace PartApp
{public partial class Form1 : Form{public Form1(){InitializeComponent();}string currentPart = "";private void button1_Click(object sender, EventArgs e){currentPart = "Button";}private void panel1_MouseClick(object sender, MouseEventArgs e){if(e.Button == MouseButtons.Left){if (currentPart != ""){And and = new And();and.Location = e.Location;and.Sensitive = new System.Drawing.Size(10, 10);and.Size = new System.Drawing.Size(80, 50);this.panel1.Controls.Add(and);currentPart = "";}}}}
}

3、运行效果
在这里插入图片描述
在这里插入图片描述

相关文章:

C#自定义控件的放置与拖动

1、自定义控件 using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace PartA…...

python circular import python循环导入问题

遇到的问题是因为模块之间存在循环导入(circular import),导致了ImportError。循环导入是指两个或多个模块相互导入对方,如模块A导入了模块B的方法,模块B又导入了模块A的方法,从而导致其中一个模块在完全初…...

kafka集群安装

kafka集群安装 文档 kafka单机安装 下载地址 官网:https://kafka.apache.org/最新版本下载页面:https://kafka.apache.org/downloads 说明 版本选择:3.0.0,kafka_2.12-3.0.0.tgz下载地址:https://archive.apache…...

SQL通用语法、SQL分类以及DDL

1.SQL 1.1SQL通用语法 1.SQL语句可以单行或多行书写,以分号结尾2.SQL语句可以使用空格/缩进来增强语句的可读性。3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。4.注释: 单行注释:–空格 注释内容或#注释内容&#…...

静态链接和动态链接

静态链接和动态链接是两种将可执行文件与库进行链接的方式。它们的主要区别体现在链接时机、可执行文件的大小以及运行时的灵活性上。 1.静态链接 在静态链接中,所有需要的库(例如 C 标准库 libc)都会在编译时被复制并嵌入到最终的可执行文…...

构建智能门禁安防系统:树莓派 4B、OpenCV、SQLite 和 MQTT 的应用(代码示例)

一、项目概述 1.1 项目目标和用途 本项目旨在开发一个智能门禁安防系统,该系统利用摄像头和人脸识别技术,结合本地人脸库,实现对进出人员的自动识别和管理。系统能够实时记录进出人员的信息,并对未注册人员进行警报提示。通过与…...

基于 Konva 实现Web PPT 编辑器(二)

动画系统 为了实现演示中复杂的动画效果,使用 Animation 类统一管理;切换动画通过 css animation 实现,并且是应用在 konvajs-content 上,动画则通过 gsap 实现,应用在 Konva.Node 上,实现思路如下&#xf…...

【开源免费】基于SpringBoot+Vue.JS在线竞拍系统(JAVA毕业设计)

本文项目编号 T 013 ,文末自助获取源码 \color{red}{T013,文末自助获取源码} T013,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

Qt TabWidget添加多个窗口,实现分页窗体布局

Qt TabWidget添加多个窗口窗体,可关闭与打开 点击按钮可判断是否打开,避免重复打开 使用Qt中的TabWidget组件创建一个简单的分页窗体布局。点击按钮时,会新增一个窗体并添加到TabWidget中。每个子窗体能动态获取父窗体指针以进行操作 分别…...

HarmonyOS开发实战( Beta5版)合理使用动画丢帧规范实践

本文列举了部分用于优化动画时延的正反案例,帮助开发者在遇到相似场景时进行优化,解决构建页面动画时遇到动画时延较长的问题。 减少动画丢帧 在播放动画或者生成动画时,画面产生停滞而导致帧率过低的现象,称为动画丢帧。 播放…...

基于BiLSTM-CRF的医学命名实体识别研究(下)模型构建

一.生成映射字典 接下来需要将每个汉字、边界、拼音、偏旁部首等映射成向量。所以,我们首先需要来构造字典,统计多少个不同的字、边界、拼音、偏旁部首等,然后再构建模型将不同的汉字、拼音等映射成不同的向量。 在prepare_data.py中自定义…...

5.sklearn-朴素贝叶斯算法、决策树、随机森林

文章目录 环境配置(必看)头文件引用1.朴素贝叶斯算法代码运行结果优缺点 2.决策树代码运行结果决策树可视化图片优缺点 3.随机森林代码RandomForestClassifier()运行结果总结 本章学习资源 环境配置(必看) Anaconda-创建虚拟环境…...

VMWARE VCENTER6.7 VCSA通过Web5480进行版本升级

VCENTER当前版本如下图 操作前先给VCENTER打一个快照,出问题可以立即回退 1、先下载VCSA镜像,并将VCSA镜像上传至DataStore中; 2、选中VCSA虚拟机,编辑配置 3、挂载新上传的VCSA镜像,一定要勾选“已连接”和“打开电源…...

GIT使用常见问题

如何安装Git? 在Windows操作系统中,可以从Git官方网站(https://git-scm.com)下载最新的Git安装程序,然后按照提示进行安装。在Mac操作系统中,可以使用Homebrew或者直接从Git官方网站下载安装程序进行安装。…...

内核链表

一、特点 灵活性 内核链表可以连接各种不同类型的数据结构,因为它只包含指向下一个和上一个节点的指针,不依赖特定的数据类型,这使得内核开发者可以根据不同的需求灵活地使用它。你可以将不同类型的结构体通过内核链表连接起来,实…...

行空板上YOLO和Mediapipe视频物体检测的测试

Introduction 经过前面三篇教程帖子(yolov8n在行空板上的运行(中文),yolov10n在行空板上的运行(中文),Mediapipe在行空板上的运行(中文))的介绍,…...

【Spring Boot 3】【Web】ProblemDetail

【Spring Boot 3】【Web】ProblemDetail 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花…...

市占率最高的显示器件,TFT_LCD的驱动系统设计--Part 1

目录 一、简介 二、TFT-LCD驱动系统概述 (一)系统概述 (二)设计要点 二、扫描驱动电路设计 (一)概述 扫描驱动电路的功能 扫描驱动电路的组成部分 设计挑战 驱动模式 (二&#xff09…...

Linux基础 -- 获取CPU负载信息

Linux Kernel 获取当前负载情况 本文档介绍了如何在 Linux 内核中获取系统的负载情况。我们将从用户态程序、内核模块开发等角度展示相关方法。 1. 通过 /proc/loadavg 文件获取负载 /proc/loadavg 文件包含了系统的负载信息,通常包括过去 1 分钟、5 分钟和 15 分…...

Django 中的用户界面 - 创建速度计算器

在 Django 中创建一个用户界面来计算速度,可以通过以下步骤完成。这个速度计算器将允许用户输入距离和时间,计算并显示速度。 一、问题背景 一位 Django 新手希望使用 Django 构建一个用户界面,以便能够计算速度(速度 距离/时间…...

012.整体框架适配SDRAM|千篇笔记实现嵌入式全栈/裸机篇

⚠️裸机仓库:https://gitee.com/simonchina_carel_li/mini2440-bare-metal.git ⚠️Tag: 11-sdram-apply 1. 这次要做什么? 我们已经完成了sdram的初始化,现在sdram已经可以使用了 我们之前的固件,栈空间是跑在SOC内置的4KB的S…...

智能去重引擎:Zotero文献管理效率提升指南

智能去重引擎:Zotero文献管理效率提升指南 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 学术研究中,文献库的整洁度直…...

突破学术资源获取壁垒:Unpaywall开源工具全解析

突破学术资源获取壁垒:Unpaywall开源工具全解析 【免费下载链接】unpaywall-extension Firefox/Chrome extension that gives you a link to a free PDF when you view scholarly articles 项目地址: https://gitcode.com/gh_mirrors/un/unpaywall-extension …...

沐曦股份曦云C系列GPU Day 0 适配智谱GLM-5.1 全栈技术领跑国产AI生态

4月8日,智谱新一代旗舰模型GLM-5.1实现开源。目前,沐曦股份曦云 C 系列 GPU已完成该系列模型Day 0 全量适配,再度以全栈自主技术实力,领跑国产 GPU 生态适配赛道。相比于GLM-5,GLM-5.1的整体能力得到了全面提升&#x…...

3个高效步骤打造智能研究助手:基于Gemini与LangGraph的全栈AI应用开发指南

3个高效步骤打造智能研究助手:基于Gemini与LangGraph的全栈AI应用开发指南 【免费下载链接】gemini-fullstack-langgraph-quickstart Get started with building Fullstack Agents using Gemini 2.5 and LangGraph 项目地址: https://gitcode.com/gh_mirrors/ge/g…...

Windows 10/11 保姆级教程:用 ZoeDepth 一键生成图片深度图(附常见错误修复)

Windows 10/11 深度图生成实战:ZoeDepth 从零安装到避坑指南 深度图生成技术正在改变我们处理图像的方式,而ZoeDepth作为一款开源的深度估计模型,以其出色的性能和易用性吸引了大量开发者。但对于Windows平台的新手来说,从零开始…...

快速掌握AI专著撰写技巧,热门工具大揭秘助你轻松完成专著!

学术专著写作困境与AI工具的兴起 对于许多学者来说,写作学术专著时常面临的最大难题,就是“有限的精力”与“无穷的需求”之间的冲突。撰写专著通常需要3到5年,甚至更长的时间,而研究人员日常还要兼顾教学、科研项目和学术交流等…...

【实战】从零构建onnxruntime:源码编译全流程与疑难解析

1. 环境准备:搭建编译基础环境 在开始编译onnxruntime之前,我们需要先准备好基础环境。我选择的是Ubuntu 20.04 LTS系统,这个版本长期支持且稳定性好,实测下来各种依赖库的兼容性也最佳。如果你用的是其他Linux发行版,…...

5分钟快速上手labelCloud:轻量级3D点云标注工具的完整指南

5分钟快速上手labelCloud:轻量级3D点云标注工具的完整指南 【免费下载链接】labelCloud A lightweight tool for labeling 3D bounding boxes in point clouds. 项目地址: https://gitcode.com/gh_mirrors/la/labelCloud 你是否正在寻找一款简单易用、功能强…...

开源原神帧率解锁工具:突破60FPS限制的技术实现与应用指南

开源原神帧率解锁工具:突破60FPS限制的技术实现与应用指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 原神作为一款画面精美的开放世界游戏,其默认60FPS帧率限…...