Announcement

Collapse
No announcement yet.

Nhờ tìm lỗi trong code bài thực hành 5 môn lập trình win

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Nhờ tìm lỗi trong code bài thực hành 5 môn lập trình win

    Đề bài của bài tập là
    Bài 3: Viết chương trình vẽ một hình vuông ở giữa vùng cửa sổ client. Sau đó có thể dùng chuột để dịch chuyển hình vuông trên vùng cửa sổ.

    Mình làm được cho nó ở giữa vùng cửa sổ client, move được rồi, không có lỗi hay warning gì cả, nhưng có 1 cái hiện tượng khó hiểu ở đây là nếu thi thoảng đè chuột rồi move 1 đoạn ngắn, thả chuột ra thì cái hình vuông nó tự động quay lại đúng ngay giữa form (cứ click chuột di liên tục là thấy ngay). Đôi khi move 1 đoạn dài cũng vẫn bị. Điều kỳ cục là đoạn code để vẽ hình vuông ở giữa form mình đã cho nó vào if để ngăn nó vẽ lung tung, nhưng không hiểu sao vẫn bị.

    Đây là đoạn code mình viết:
    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace TH5_3
    {
        public partial class Form1 : Form
        {
            const int squareWidth = 100;
            Point pastMousePos = new Point(0, 0);
            Point currentMousePos = new Point(0, 0);
            Rectangle square = new Rectangle(0,0, squareWidth, squareWidth);
            bool moveEnable = false;
            public Form1()
            {
                InitializeComponent();
                this.Paint +=new PaintEventHandler(Form1_Paint);
                
            }
    
            Point getDrawPoint(int width, int height)
            {
                Point p = new Point(0,0);
                p.X = (int)(width - squareWidth) / 2;
                p.Y = (int)(height - squareWidth) / 2;
                return p;
            }
    
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
    
                if (moveEnable == true)
                {
                    Graphics g = CreateGraphics();
                    g.DrawRectangle(Pens.Black, square);
                    g.Dispose();
                    
                }
                else // ve hinh vuong o giua form
                {
                    square.X = getDrawPoint(ClientRectangle.Width, ClientRectangle.Height).X;
                    square.Y = getDrawPoint(ClientRectangle.Width, ClientRectangle.Height).Y;      
                    Graphics g = CreateGraphics();
                    g.DrawRectangle(Pens.Black,square);
                    g.Dispose();
                }
            }
    
            private void Form1_Resize(object sender, EventArgs e)
            {
                Invalidate();
            }
    
            private void Form1_MouseDown(object sender, MouseEventArgs e)
            {
                moveEnable = true;
                currentMousePos = e.Location;          
            }
    
            private void Form1_MouseMove(object sender, MouseEventArgs e)
            {
                if (moveEnable == true)
                {             
                    pastMousePos = currentMousePos;
                    currentMousePos = e.Location;
                    square.X -= (pastMousePos.X - currentMousePos.X);
                    square.Y -= (pastMousePos.Y - currentMousePos.Y);
                    Invalidate();
                }
            }
    
    
            private void Form1_MouseUp(object sender, MouseEventArgs e)
            {               
                moveEnable = false;
            }
        }
    }
    Last edited by 11520115; 15-04-2013, 12:18.

LHQC

Collapse
Working...
X