Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Bắt sự kiện Mousedown khi vẽ hình chữ nhật trên Form

  1. #1
    Ngày gia nhập
    06 2011
    Bài viết
    2

    Mặc định Bắt sự kiện Mousedown khi vẽ hình chữ nhật trên Form

    Các bác giỏi về C# giúp mình vấn để này nha:
    Mình muốn vẽ hình chữ nhật trêm form khi bắt sựn kiên mousedown, mình muốn ghi tọa độ (x,y, width,height) khi vừa nhấp chuụot lên fowm thì phải làm sao, mong các bác chỉ giúp

    private void PANE_MouseDown(object sender, MouseEventArgs e)
    if (toolRectangle.Checked)
    {
    Rectangle rectangle = new Rectangle(????);
    canvas.Add(rectangle);
    canvas.IsEditing = true;
    panel1.Refresh();
    }

  2. #2
    Ngày gia nhập
    02 2010
    Bài viết
    73

    Cái này vừa phối hợp với Mouse up và mouse down mới được chứ.
    Mousedown để lấy tọa độ ban đầu vẽ, mouse up để lấy tọa độ lúc sau để tính chiều dài rộng của HCN
    Visual C# Code:
    1.         private void Form1_MouseDown(object sender, MouseEventArgs e)
    2.         {
    3.             _pP.X = e.X;
    4.             _pP.Y = e.Y;
    5.         }
    6.  
    7.         private void Form1_MouseUp(object sender, MouseEventArgs e)
    8.         {
    9.             Graphics grp = CreateGraphics();
    10.             grp.DrawRectangle(new Pen(Brushes.Black), _pP.X, _pP.Y, Math.Abs(e.X - _pP.X), Math.Abs(e.Y - _pP.Y));
    11.         }
    12.     }
    13. }

    cái này để tham khảo,biến_pP là biến Point khai báo trong class form

  3. #3
    Ngày gia nhập
    10 2010
    Bài viết
    518

    Bác xem project ở dưới xem, cái này trích từ 1 project trước m làm, làm biếng nên chắc còn thừa 1 vài phương thức + biến chưa xóa dc-bác chịu khó đọc vậy nhé. Bên trong này có vẽ trục tọa độ, vẽ lưới(sẽ có bắt dính chuột vào các điểm lưới), hiện tọa độ chuột, dùng chuột vẽ hình chữ nhật(vẽ hình chữ nhật này được bắt dính vào các điểm lưới). Thắc mắc hoặc muốn mở rộng tính năng thì hỏi nhé
    PS: nếu cần làm thì m có thể chỉ hướng để cậu có thể viết 1 chương trình miniCAD nhỏ với các hình cơ bản.
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi Solewind.IT : 20-10-2011 lúc 12:33 PM.

  4. #4
    Ngày gia nhập
    02 2010
    Bài viết
    73

    Up lại Code , code trên không hiện hình chữ nhật khi kéo
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9.  
    10. namespace WindowsFormsApplicationexample
    11. {
    12.     public partial class Form1 : Form
    13.     {
    14.  
    15.         Point _pPF = new Point(0, 0);
    16.        
    17.         Point _pPA = new Point(0, 0);
    18.         bool draw = true;
    19.  
    20.         public Form1()
    21.         {
    22.             InitializeComponent();
    23.         }
    24.  
    25.  
    26.         private void Form1_Load(object sender, EventArgs e)
    27.         {
    28.  
    29.         }
    30.  
    31.         private void Form1_MouseDown(object sender, MouseEventArgs e)
    32.         {
    33.             _pPF = e.Location;
    34.             draw = true;
    35.  
    36.         }
    37.  
    38.  
    39.  
    40.         private void Form1_MouseMove(object sender, MouseEventArgs e)
    41.         {
    42.             if (draw)
    43.             {
    44.                 if (e.Button == MouseButtons.Left)
    45.                     _pPA = e.Location;
    46.                 Invalidate();
    47.             }
    48.         }
    49.  
    50.        
    51.  
    52.         private void Form1_Paint(object sender, PaintEventArgs e)
    53.         {
    54.             Graphics grp = CreateGraphics();
    55.  
    56.             Rectangle _newRectangle = new Rectangle(_pPF, new Size(Math.Abs(_pPA.X - _pPF.X), Math.Abs(_pPA.Y - _pPF.Y)));
    57.             grp.DrawRectangle(new Pen(Brushes.Black), _newRectangle);
    58.         }
    59.  
    60.         private void Form1_MouseUp(object sender, MouseEventArgs e)
    61.         {
    62.             draw = false;
    63.         }
    64.  
    65.  
    66.     }
    67. }

  5. #5
    Ngày gia nhập
    06 2011
    Bài viết
    2

    Mình vẫn chưa làm được
    - mình gửi code mìnvieetsae, các bác xem dùm rồi giúp mình với nhé:
    - có 3 lớp:
    - lớp Rec:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Drawing;

    {
    class Rec
    {
    private int x, y, width, height;
    private int boderDrawRectangle;
    private Color drawRectanglecolor;

    public Rec(int x, int y, int width, int height)
    {
    this.x = x;
    this.y = y;

    if (width < 0)
    width = 0;
    if (height < 0)
    height = 0;
    this.width = width;
    this.height = height;
    boderDrawRectangle = 1;
    drawRectanglecolor = Color.Black;
    }
    public Rec(Point leftTop, int width, int height)
    : this(leftTop.X, leftTop.Y, width, height)
    {
    }
    public int X
    {
    get { return x; }
    set { x = value; }
    }
    public int Y
    {
    get { return y; }
    set { y = value; }
    }
    public int Width
    {
    get { return width; }
    set
    {
    if (value >= 0)
    width = value;
    }
    }
    public int Height
    {
    get { return height; }
    set
    {
    if (value >= 0)
    height = value;
    }
    }
    public int BoderDrawRectangle
    {
    get { return boderDrawRectangle; }
    set { boderDrawRectangle = value; }
    }
    public Color DrawRectangle
    {
    get { return drawRectanglecolor; }
    set { drawRectanglecolor = value; }
    }



    }
    - lớp bản vẽ
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Drawing ;

    {

    class Canvas
    {
    int height, width;
    private List<Line> lines;
    private List<Rec> rectangles;
    private bool isEditing = false ;
    private Line SelectLine;
    public bool IsEditing
    {
    get{return isEditing ;}
    set{ isEditing =value ;}
    }

    public Canvas()
    {
    this.height = 250;
    this.width = 400;
    lines = new List<Line>();
    rectangles = new List<Rec>();

    }
    public int Height
    {
    get { return height; }
    }
    public int Width
    {
    get { return width; }
    }

    public void Add(Rec rectangle)
    {
    rectangles.Add(rectangle);
    }
    public Rec GetTop()
    {
    if (rectangles.Count == 0)
    return null;
    return rectangles[rectangles.Count - 1];
    }

    public void Draw(Graphics gr)
    {
    foreach (Rec item in rectangles)
    {
    Pen pen = new Pen(item.DrawRectangle, item.BoderDrawRectangle);
    gr.DrawLine(pen, item.X, item.Y, item.Width, item.Height);
    }
    }


    }
    }
    - Sự kiên trên Form:
    private void PANE_MouseDown(object sender, MouseEventArgs e)
    {

    if (toolRectangle.Checked)
    {
    ///////////////////chỗ này mình chưa làm đc
    canvas.Add(r);
    canvas.IsEditing = true;
    panel1.Refresh();


    }
    }

    private void PANE_MouseMove(object sender, MouseEventArgs e)
    {
    if (canvas.IsEditing)
    {
    //////////////Đoạn code chỗ này mình làm không được
    PANE.Refresh();


    }
    }

    private void PANE_MouseUp(object sender, MouseEventArgs e)
    {
    canvas.IsEditing = false;
    PANE.Refresh();
    }

    private void PANE_Paint(object sender, PaintEventArgs e)
    {
    canvas.Draw(e.Graphics);
    }

  6. #6
    Ngày gia nhập
    10 2010
    Bài viết
    518

    Mặc định Bắt sự kiện Mousedown khi vẽ hình chữ nhật trên Form

    Bác đã xem cái m gửi chưa? xem k hiểu hay nhìn ngại wa mà k xem tiếp, nếu ngại thì xem code của bác tamthientai rồi sửa thêm 1 chút là ngon thôi. Mà cách code như của bác mà sau này muốn nâng cấp thêm thì mệt lắm đấy, mình chỉ nói đơn giản là ví dụ cần vẽ thêm hình tròn, hay muốn có thêm phần click chuột để chọn hình chẳng hạn là đủ mệt rồi.

Các đề tài tương tự

  1. Vẽ biểu đồ cột trên Form vs control Chart
    Gửi bởi namnguyen1251 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 02-04-2013, 03:31 PM
  2. Trả lời: 2
    Bài viết cuối: 22-09-2011, 07:37 PM
  3. vẽ một ma trận trên form C# thì làm thế nào??
    Gửi bởi tto_1991 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 22-09-2011, 04:47 PM
  4. Sự Kiện MouseDown | Xác định tọa độ chuột khi nhấn phím?
    Gửi bởi SComMax trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 08-04-2010, 10:50 PM
  5. Vẽ và di chuyển 1 hình tròn trên form trong C#?
    Gửi bởi nguenviet trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 09-04-2009, 04:12 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn