c#画图问题
如何用鼠标画一个长方形,并且可以按需要拖动改变大小,像许多软件中一样有一个边框,有八个方向可以拖动的那样子。。给点思路也行 谢谢。 --------------------编程问答-------------------- private bool m_Mouser = false;private Point m_MouserPoint = new Point();
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (m_Mouser)
{
panel1.Refresh();
Rectangle _Rectangle = new Rectangle();
_Rectangle.X = m_MouserPoint.X;
_Rectangle.Y = m_MouserPoint.Y;
_Rectangle.Width = e.Location.X - m_MouserPoint.X;
_Rectangle.Height = e.Location.Y - m_MouserPoint.Y;
ControlPaint.DrawReversibleFrame(GetUprightRectangle(_Rectangle), Color.White, FrameStyle.Thick);
}
}
/// <summary>
/// 根据矩形 如果Width是正直接返回 如果使-会转换成正的矩形 保证大小位置不变
/// </summary>
/// <param name="p_Rectangle">矩形</param>
/// <returns>正矩形</returns>
public static Rectangle GetUprightRectangle(Rectangle p_Rectangle)
{
Rectangle _Rect = p_Rectangle;
if (_Rect.Width < 0)
{
int _X = _Rect.X;
_Rect.X = _Rect.Width + _Rect.X;
_Rect.Width = _X - _Rect.X;
}
if (_Rect.Height < 0)
{
int _Y = _Rect.Y;
_Rect.Y = _Rect.Height + _Rect.Y;
_Rect.Height = _Y - _Rect.Y;
}
return _Rect;
}
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
m_Mouser = true;
m_MouserPoint = e.Location;
}
}
private void panel1_MouseUp(object sender, MouseEventArgs e)
{
m_Mouser = false;
}
坐标自己换算下把. --------------------编程问答--------------------
using System;--------------------编程问答-------------------- 楼上确定能八个方向拖动吗……
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
Point p = new Point();
Rectangle rect;
ArrayList al = new ArrayList();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.DoubleBuffered = true;
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
p = e.Location;
rect = new Rectangle();
}
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
rect.X = e.X > p.X ? p.X : e.X;
rect.Y = e.Y > p.Y ? p.Y : e.Y;
rect.Width = e.X - p.X > 0 ? e.X - p.X : p.X - e.X;
rect.Height = e.Y - p.Y > 0 ? e.Y - p.Y : e.Y - p.Y;
this.Invalidate();
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
al.Add(rect);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Pen pen = new Pen(Color.Red, 3);
e.Graphics.DrawRectangle(pen, rect);
foreach (Rectangle re in al)
{
e.Graphics.DrawRectangle(pen, re);
}
pen.Dispose();
}
}
}
8个方向得分8种情况讨论了,举个例子:
矩形的左上角的点是x0,y0。那么当mousedown事件的(e.x==x0 && e.y==y0),此时设置flag1=true;
picturebox1.refresh(); 此时对矩形进行重绘。
其他几种情况类似,分别重绘即可。
如果嫌四个顶点不好点中,可用四个小的GraphicsPath,然后用g.isvisible判断是否点中。
(至于四条边,也可以用粗一些的四个GraphicsPath进行判断) --------------------编程问答-------------------- 高手。。。学习中 --------------------编程问答-------------------- 这个简单 鼠标按下 记下起点 拖动 左键谈起
生成一个自定义的usercontrol
在user control 里面编写鼠标 事件 支持4个边框 拖拽
就是离某个边只有3个像素的时候 就改变鼠标图形 然后可以拖动这边 --------------------编程问答-------------------- 这个简单 鼠标按下 记下起点 拖动 左键谈起
生成一个自定义的usercontrol
在user control 里面编写鼠标 事件 支持4个边框 拖拽
就是离某个边只有3个像素的时候 就改变鼠标图形 然后可以拖动这边 --------------------编程问答-------------------- 这个简单 鼠标按下 记下起点 拖动 左键谈起
生成一个自定义的usercontrol
在user control 里面编写鼠标 事件 支持4个边框 拖拽
就是离某个边只有3个像素的时候 就改变鼠标图形 然后可以拖动这边 --------------------编程问答-------------------- UP楼上的,这个方法可取 --------------------编程问答-------------------- 我做过这样的组件,需要的话,联系我。
附带源码!
补充:.NET技术 , .NET技术前瞻