我正在尝试创建一个位于用户点击位置的广场。我将pSize,pX和pY作为变量来表示方形的位置和大小。但是当我点击表格时,正方形是鼠标点击的X和Y坐标中的至少70个像素。我做了(这是表单点击功能):
pX = Cursor.Position.X;
pY = Cursor.Position.Y;
Graphics g = this.CreateGraphics();
SolidBrush brush = new SolidBrush(Color.Black);
g.FillRectangle(brush, pX, pY, pSize, pSize);
以下是正在发生的事情的图片:
屏幕截图并未显示我的光标,但它位于左上角。我还注意到,每次启动程序时,正方形的偏移量都会发生变化,所以这次它相对较远,而下一次它在两个轴上的距离只有25个像素。
有人能告诉我我做错了什么和/或我能做些什么吗?感谢。
答案 0 :(得分:1)
您目前正在获取 Cursor 位置。哪个是相对于屏幕,这就是为什么当您移动表单时它是一个不同的偏移量。
要获得相对于表单的位置,您需要使用鼠标单击位置(听起来类似于欺骗人的方式)。
您需要确保Click事件引发MouseEventHandler:
this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.DrawSquare);
然后你需要从事件处理程序中获取协调员:
private void DrawSquare(object sender, MouseEventArgs e)
{
int pX = e.X;
int pY = e.Y;
int pSize = 10;
Graphics g = this.CreateGraphics();
SolidBrush brush = new SolidBrush(Color.Black);
g.FillRectangle(brush, pX, pY, pSize, pSize);
}
答案 1 :(得分:0)
我认为您不需要光标位置,而是需要点击位置。 试试这个:
private void Form2_MouseClick(object sender, MouseEventArgs e)
{
int pX = e.X;
int pY = e.Y;
Graphics g = this.CreateGraphics();
SolidBrush brush = new SolidBrush(Color.Black);
g.FillRectangle(brush, pX, pY, 10, 10);//Size just for testing purposes
}