首页 > 编程语言 >C# picturebox画矩形、圆

C# picturebox画矩形、圆

时间:2023-08-09 11:13:08浏览次数:41  
标签:leftClick C# System picturebox using 矩形 true public rectangle

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 自定义画矩形
{
/// <summary>
/// 类型:1、画矩形 2、画圆
/// 绘制按钮:drawState = true;
/// 移动按钮:moveState = true;
/// 4个事件:MouseDown、MouseUp、MouseMove、Pain
/// 窗体LOAD事件加入以下代码:
/// </summary>

// this.SetStyle(ControlStyles.ResizeRedraw, true);
// this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
// this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
// this.SetStyle(ControlStyles.UserPaint, true);
// this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
// this.UpdateStyles();
public class DrawRect
{
Pen pen;
Rectangle rectangle;
//左键是否按下
public bool leftClick = false;
//绘制状态
public bool drawState = false;
//移动模式
public bool moveState = false;
//移动模式下位移前的点坐标
public Point point = new Point();

PictureBox pictureBox1;
//框类型
int type;

public DrawRect(PictureBox pictureBox,int _type)
{
pictureBox1 = pictureBox;
pen = new Pen(Color.FromArgb(0, 192, 0), 1);
rectangle = new Rectangle();
type = _type;
}

public void MouseDown(object sender, MouseEventArgs e)
{
//判断是否处于绘制状态
if (drawState)
{
rectangle.X = e.X;
rectangle.Y = e.Y;
//左键被按下
leftClick = true;
}
else if (moveState)
{
//左键被按下
leftClick = true;
//记录当前坐标值
point.X = e.X;
point.Y = e.Y;
}
}

public void MouseUp(object sender, MouseEventArgs e)
{
if (drawState)
{
//完成绘制
leftClick = false;
drawState = false;
pictureBox1.Invalidate();
}
else if (moveState)
{
//完成移动
leftClick = false;
moveState = false;
pictureBox1.Invalidate();
}
}

public void MouseMove(object sender, MouseEventArgs e)
{
if (drawState)
{
//判断左键是否按下
if (leftClick)
{
rectangle.Width = e.X - rectangle.X;
rectangle.Height = e.Y - rectangle.Y;
pictureBox1.Invalidate();
}
}
else if (moveState)
{
//判断左键是否按下
if (leftClick)
{
rectangle.X = rectangle.X + (e.X - point.X);
rectangle.Y = rectangle.Y + (e.Y - point.Y);
pictureBox1.Invalidate();
//位移前的点坐标
point.X = e.X;
point.Y = e.Y;
}
}
}

public void Pain(object sender, PaintEventArgs e)
{
if (type == 1)
{
e.Graphics.DrawRectangle(pen, rectangle);
} else if (type == 2)
{
e.Graphics.DrawEllipse(pen, rectangle);
}
}
}
}

标签:leftClick,C#,System,picturebox,using,矩形,true,public,rectangle
From: https://www.cnblogs.com/daijian945/p/17616313.html

相关文章

  • 关于CH32F系列以及CH32V系列 SysTick的使用
    1、关于SysTickCH32F103/203:CH32F103/203SysTick和STM32F103一样为Cortex-M3内核,是一个24位的向下递减计数器,计数器每计数一次的时间为1/SYSCLK(系统主频)。当SysTick重装载数寄存器的值递减到0的时候,产生一次中断。CH32F系列MCUSysTick由4个寄存器控制,具体如下图。具体介绍可......
  • c++中template的用法是什么?
    下文由ChatGPT生成在C++中,template是一种通用编程工具,用于创建通用的函数或类。通过使用模板,可以编写可以应用于不同数据类型的函数或类,从而实现代码的重用性和灵活性。template的使用方法如下:1.函数模板(FunctionTemplates)函数模板允许定义一个通用的函数,可以在不同数据类......
  • C# 使用FFmpeg.Autogen对byte[]进行编解码
    C#使用FFmpeg.Autogen对byte[]进行编解码,参考:https://github.com/vanjoge/CSharpVideoDemo入口调用类:usingSystem;usingSystem.IO;usingSystem.Drawing;usingSystem.Runtime.InteropServices;usingFFmpeg.AutoGen;namespaceFFmpegAnalyzer{publicclassFFm......
  • 输入框 input的 支持 clearable 清空 select 下拉列表框的 支持 clearable 清空 fil
    开发的前端 中select 下拉列表框 必须支持1、模糊查询2、清空按钮......
  • 基于RocketQA的CrossEncoder训练单塔模型
    本文分享自华为云社区《语义检索系统排序模块:基于ERNIE-Gram的Pair-wise和基于RocketQA的CrossEncoder训练单塔模型》,作者:汀丶。 文本匹配任务数据每一个样本通常由两个文本组成(query,title)。类别形式为0或1,0表示query与title不匹配;1表示匹配。基于单塔Point-wise范式......
  • CDGA/CDGP数据治理认证8月20日正式开班
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......
  • 2023年CSPM-3国标项目管理中级认证报名到这里就对了
    CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要求,培养我国项目管理领域复合型人才。  【证书含金量】 ·竞聘优先......
  • 2023年9月北京/广州深圳DAMA-CDGA/CDGP认证考试报名进行中
    据DAMA中国官方网站消息,2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行。 报名通道现已开启,相关事宜通知如下: 考试科目: 数据治理工程师(CertifiedDataGovernanceAssociate,CDGA)数据治理专家(CertifiedDataGovernanceProfessional,CDGP) 考试时间: CDGA:2023......
  • Pytorch框架CV开发-从入门到实战
    点击下载:Pytorch框架CV开发-从入门到实战课程分享,视频+源码+数据集下载!提取码:bbvaPyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。它主要由Facebookd的人工智能小组开发,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这一点是现在很多主流框架如......
  • AMC Markets外汇平台怎么样?
    FX110数据显示,AMCMarkets成立于2019年,网友安全评分仅有70.2分,受白俄罗斯NBRB监管。本篇文章仅供参考,注意相关风险。关于AMCMarkets平台AMMarkets作为加拿大领先的金融公司,拥有雄厚的经济实力,是行业内备受推崇的外汇交易商之一。AMMarkets隶属于一家屡获殊荣的加拿大公司Advance......