//只是想简单的实现绘制出一个矩形 点下鼠标时记录坐标 抬起时又记录坐标
//然后通过这两次坐标值绘制矩形 可是却什么也没画出 很郁闷……
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);
} }
}

解决方案 »

  1.   

    跟踪你的StartPoint和EndPoint的值,另外不明白为什么宽度是:EndPoint - StartPoint而高度却是StartPoint - EndPoint?
      

  2.   

    private int startX = 0, startY = 0;
    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;
    }
    }
      

  3.   

    而且 chinasdp大哥给的程序也并非我的本意
    我是想象WINDOWS里的图画一样能实现拖动式的绘图的呀 
    呵呵
      

  4.   

    private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    EndPoint.X = e.X;
    EndPoint.Y = e.Y;
    this.Invalidate();
    }
      

  5.   

    this.Invalidate();
    通知窗体重绘
      

  6.   

    pupo(泡泡)你没有试过吧 
    加上那句也不行 我这样成功了 呵呵
    但我仍然想知道我上面没成功的原因是什么?
    ------------------------
    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);
    } }
    }
      

  7.   

    你这样写就可以看得出我得代码得效果了
    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();
    }
    }