我的目标是实现一个窗体,其中显示一个十字准线,其中心也标记窗体的中心。调整窗体大小时,应调整十字准线,使其继续标记窗体的中心。
为此,我编写了以下代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ResizeRedraw = true;
}
private void DrawCrosshair(Graphics g, Size size)
{
Pen pen = new Pen(Color.Black)
{
Width = 2
};
var halfWidth = Convert.ToInt32(size.Width / 2.0);
var halfHeight = Convert.ToInt32(size.Height / 2.0);
Point left = new Point(0, halfHeight);
Point right = new Point(size.Width - 1, halfHeight);
Point top = new Point(halfWidth, 0);
Point bottom = new Point(size.Height - 1, halfWidth);
g.DrawLine(pen, left, right);
g.DrawLine(pen, top, bottom);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
DrawCrosshair(e.Graphics, Size);
}
}
在形状上绘制了线,但它们没有正确放置。特别是,垂直线表现得很奇怪,并且被绘制成部分弯曲:
我是不是算错坐标了?还是有其他的事情干扰了我的绘画?我使用的是.NET Framework 4.7.2。
1条答案
按热度按时间ubby3x7f1#
您不小心交换了底部点上的X,Y:
new Point(size.Height - 1, halfWidth);
试试这个: