//只是想简单的实现绘制出一个矩形 点下鼠标时记录坐标 抬起时又记录坐标
//然后通过这两次坐标值绘制矩形 可是却什么也没画出 很郁闷……
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;namespace drawRect
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
private Point StartPoint = new Point();
private Point EndPoint = new Point();
public Form1()
{
InitializeComponent(); } /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Name = "Form1";
this.Text = "Form1";
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp); }
#endregion /// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
} private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
StartPoint.X = e.X;
StartPoint.Y = e.Y;
} private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
EndPoint.X = e.X;
EndPoint.Y = e.Y;
} protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//Graphics g = this.CreateGraphics();
e.Graphics.DrawRectangle(new Pen(Color.Black,2),StartPoint.X,StartPoint.Y,EndPoint.X -
StartPoint.X,StartPoint.Y - EndPoint.Y);
} }
}
//然后通过这两次坐标值绘制矩形 可是却什么也没画出 很郁闷……
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;namespace drawRect
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
private Point StartPoint = new Point();
private Point EndPoint = new Point();
public Form1()
{
InitializeComponent(); } /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Name = "Form1";
this.Text = "Form1";
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp); }
#endregion /// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
} private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
StartPoint.X = e.X;
StartPoint.Y = e.Y;
} private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
EndPoint.X = e.X;
EndPoint.Y = e.Y;
} protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//Graphics g = this.CreateGraphics();
e.Graphics.DrawRectangle(new Pen(Color.Black,2),StartPoint.X,StartPoint.Y,EndPoint.X -
StartPoint.X,StartPoint.Y - EndPoint.Y);
} }
}
private int endX = 0, endY = 0;
private bool down = false;
// 假设在Form上画
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(down)
{
endX = e.X;
endY = e.Y;
Rectangle rect = new Rectangle(0, 0, 0, 0);
rect.X = (int)Math.Min(startX, endX);
rect.Y = (int)Math.Min(startY, endY);
rect.Width = (int)Math.Max(startX, endX) - rect.X;
rect.Height = (int)Math.Max(startY, endY) - rect.Y;
this.CreateGraphics().DrawRectangle(new Pen(Color.Black), rect);
down = false;
}
else
{
startX = e.X;
startY = e.Y;
down = true;
}
}
我是想象WINDOWS里的图画一样能实现拖动式的绘图的呀
呵呵
{
EndPoint.X = e.X;
EndPoint.Y = e.Y;
this.Invalidate();
}
通知窗体重绘
加上那句也不行 我这样成功了 呵呵
但我仍然想知道我上面没成功的原因是什么?
------------------------
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;namespace drawRect
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
private Point StartPoint = new Point();
private Point PrePoint = new Point();
private Point EndPoint = new Point();
private Point CurShape = new Point();
public Form1()
{
InitializeComponent(); } /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Name = "Form1";
this.Text = "Form1";
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp); }
#endregion /// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
} private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{ Point p = new Point(e.X,e.Y);
this.CurShape = p;
} private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
Point p = new Point(e.X,e.Y);
Graphics g = this.CreateGraphics();
g.DrawRectangle(new Pen(Color.Red,3),this.CurShape.X,this.CurShape.Y,e.X
- this.CurShape.X,e.Y - this.CurShape.Y);
} }
}
private Point StartPoint = new Point();
private Point EndPoint = new Point();
private bool startDraw = false; private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
StartPoint.X = e.X;
StartPoint.Y = e.Y;
startDraw = true;
} private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
startDraw = false;
} protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawRectangle(new Pen(Color.Black,2),StartPoint.X, StartPoint.Y ,EndPoint.X -
StartPoint.X, EndPoint.Y- StartPoint.Y);
} private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (startDraw == true)
{
EndPoint.X = e.X;
EndPoint.Y = e.Y;
this.Invalidate();
}
}