Nat*_*han 13 c# runtime winforms
我正在尝试创建一些在运行时使用的对齐网格功能,但我遇到了捕捉部分的问题.我已成功在面板上绘制了一个虚线网格,但是当我向面板添加标签控件时,如何将标签的左上角捕捉到最近的点?
谢谢
num*_*ati 16
我不认为接受的答案是正确的.原因如下:
如果gridwidth = 3,x上的a点4应该映射到3但是x = 5应该映射到6.使用Pedery的答案它们都将映射到3.
为了得到正确的结果,你需要像这样舍入(如果点是分数,你可以使用float):
//让我们说.
int gridCubeWidth = 3;
int gridCubeHeight = 3;
int newX = Math.Round(oldX / gridCubeWidth) * gridCubeWidth;
int newY = Math.Round(oldY / gridCubeHeight) * gridCubeHeight;
Run Code Online (Sandbox Code Playgroud)
这个对我来说效果更好,因为它根据它与下一个或上一个网格点的接近程度来移动点:
if (pt.X % gridWidth < gridWidth/2)
pt.X = pt.X - pt.X % gridWidth;
else
pt.X = pt.X + (gridWidth - pt.X % gridWidth);
if (pt.Y % gridHeight < gridHeight / 2)
pt.Y = pt.Y - pt.Y % gridHeight;
else
pt.Y = pt.Y + (gridHeight - pt.Y % gridHeight);
Run Code Online (Sandbox Code Playgroud)