鼠标不在坐标十字线的中间,怎么调整

shsyzl007 2016-05-11 11:54:49
form1上有个pictureBox1。其他代码如下

public Form1()
{
InitializeComponent();
g = pictureBox1.CreateGraphics();
}

private Graphics g;
int x, y;
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
Point point = PointToClient(MousePosition);
x = point.X;
y = point.Y;
g.Clear(Color.White);
g.DrawLine(Pens.Black, 0, y, this.Width, y);
g.DrawLine(Pens.Black, x, 0, x, this.Height);
}
...全文
185 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2016-05-11
  • 打赏
  • 举报
回复
你用窗体的坐标在 PictureBox 中画线,自然是由偏差的
crystal_lz 2016-05-11
  • 打赏
  • 举报
回复

难道你认为 我红色箭头标记的地方才是鼠标的准心 而不是蓝色箭头吗?。。。
每种样式的鼠标 对准心的定义都是不一样的 指针样式的准心是在指针尖上
还有
Point point = PointToClient(MousePosition);
你这句完全就是多余的 通过鼠标移动事件参数 e.Location 可以直接获取到鼠标在对应控件上面的坐标
而且 你用了pointtoclient(mouseposition) 意思就是 将鼠标相对于屏幕的坐标转换成在你你当前窗体上的坐标 是窗体上的坐标而不是你控件上的坐标 如果你的空间相对于窗体是fill填充的 也就是铺满窗体的 那么这个坐标和你控件上的坐标就是一样的
不然你还得 point - new point(控件.Left,控件.Top) 才是相对于你空间的坐标

还有绘图 不要再move里面 放到paint事件里面去

private Point m_pt;

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.Clear(Color.White);
g.DrawLine(Pens.Black, 0, m_pt.Y, this.Width, m_pt.Y);
g.DrawLine(Pens.Black, m_pt.X., 0, m_pt.X, this.Height);
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
m_pt = e.Location;
pictureBox1.Invalied();
}
wdx2008 2016-05-11
  • 打赏
  • 举报
回复
谢了。。。。。。。。。
江南小鱼 2016-05-11
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
你用窗体的坐标在 PictureBox 中画线,自然是由偏差的
+1 一针见血

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧