Đề 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:
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; } } }