我正在尝试制作一个绘画程序,除了我有一个主要问题,我想绘制一个正方形,我点击鼠标,除了形状没有绘制在正确的位置,这是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Paint_Program
{
public partial class Form1 : Form
{
int mousex;
int mousey;
public Form1()
{
InitializeComponent();
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
mousex = Cursor.Position.X;
mousey = Cursor.Position.Y;
System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
System.Drawing.Graphics formGraphics;
formGraphics = this.CreateGraphics();
formGraphics.FillRectangle(myBrush, new Rectangle(mousex, mousey, 20, 20));
myBrush.Dispose();
formGraphics.Dispose();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void rectangleShape1_Click(object sender, EventArgs e)
{
}
private void Test_Click(object sender, EventArgs e)
{
//testing
Console.WriteLine("X:" + mousex);
Console.WriteLine("Y: " + mousey);
}
}
}
我真的很想知道如何解决这个问题,如果有人帮助我,我会很高兴:D
答案 0 :(得分:1)
问题是有两组坐标,一组是整个屏幕的坐标,另一组是你试图绘制的控件的坐标。你需要在这两组坐标之间进行转换。看一下COntrol类中的PointToScreen方法:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.pointtoscreen(v=vs.110).aspx
答案 1 :(得分:1)
在您的代码中,您使用Coursor.Position
属性,该属性在屏幕坐标中提供光标位置:
http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.position(v=vs.110).aspx
您感兴趣的是光标相对于窗口的坐标。在您的事件处理程序中,您可以使用MouseEventArgs e
new Rectangle(e.X, e.Y, 20, 20)
方法参数轻松访问它
我认为Form1_MouseClick
事件处理程序的修改版本低于您的预期:
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
mousex = Cursor.Position.X;
mousey = Cursor.Position.Y;
System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
System.Drawing.Graphics formGraphics;
formGraphics = this.CreateGraphics();
formGraphics.FillRectangle(myBrush, new Rectangle(e.X, e.Y, 20, 20));
myBrush.Dispose();
formGraphics.Dispose();
}
答案 2 :(得分:0)
位置与您的主屏幕有关,(0,0)是主屏幕的左上角,您想要的是您正在绘制的控件的鼠标位置:
例如: Panel1.MousePosition;