在C#里面怎么在一幅位图上接着画一个矩形,我想做一个那种鼠标按下,拖拽,松开
在C#里面怎么在一幅位图上接着画一个矩形,我想做一个那种鼠标按下,拖拽,松开会在原图形之上显示矩形的效果,移动的时候矩形也是不断改变的,...
在C#里面怎么在一幅位图上接着画一个矩形,我想做一个那种鼠标按下,拖拽,松开会在原图形之上显示矩形的效果,移动的时候矩形也是不断改变的,
展开
1个回答
展开全部
思路 创建一个矩形类,保存你需要画的矩形的属性,例如:
public class MyRectangle
{
private int _top;
private int _left;
private int _height;
private int _width;
private int _penColor;
punlic void OnDraw(Graphics g)
{
g.drawRectangle(_penColor,_left,_top,_width,_height);
}
#region 属性
//...... 对成员字段进行封装
#endregion
}
窗体的成员:
private bool _isKeyDown; // 鼠标是否按下
private int _downX; // 鼠标按下时的X坐标
private int _downY; // 鼠标按下时的Y坐标
事件:
MouseDown事件
判断鼠标按下的位置是否在MyRectangle内,如果是
{
设置 _isKeyDown为true;
_downX,_downY为按下时的位置;
}
否则不做任何操作
MouseMove事件
通过加减法计算出鼠标当前位置和鼠标按下时位置的差来改变MyRectangle 的Top 和Left
通知窗体刷新界面(调用需要刷新的空间的Invalidate()方法)
MouseUp事件
设置 _isKeyDown为false;
public class MyRectangle
{
private int _top;
private int _left;
private int _height;
private int _width;
private int _penColor;
punlic void OnDraw(Graphics g)
{
g.drawRectangle(_penColor,_left,_top,_width,_height);
}
#region 属性
//...... 对成员字段进行封装
#endregion
}
窗体的成员:
private bool _isKeyDown; // 鼠标是否按下
private int _downX; // 鼠标按下时的X坐标
private int _downY; // 鼠标按下时的Y坐标
事件:
MouseDown事件
判断鼠标按下的位置是否在MyRectangle内,如果是
{
设置 _isKeyDown为true;
_downX,_downY为按下时的位置;
}
否则不做任何操作
MouseMove事件
通过加减法计算出鼠标当前位置和鼠标按下时位置的差来改变MyRectangle 的Top 和Left
通知窗体刷新界面(调用需要刷新的空间的Invalidate()方法)
MouseUp事件
设置 _isKeyDown为false;
追问
这样的话,在MouseUp的时候,所画的矩形就没有啦,怎么让它保持啊
追答
还在的
东莞大凡
2024-08-07 广告
2024-08-07 广告
棋盘格标定板是机器视觉与摄影测量中常用的校准工具,用于精确校准相机镜头或传感器的内外参数。您可以通过搜索“高清棋盘格标定板图片”在专业图像库或开源平台找到适合您需求的资源。下载后,选择高分辨率版本,使用高质量打印机及适合您应用需求的纸张材质...
点击进入详情页
本回答由东莞大凡提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询