我有一个自定义控件,它由一个面板和一个较小的图片框组成。当我在图片框中从左,上到右,底部绘制线条时,起点不是从图片框的一角开始的,而是偏移+x和+y。如果我展开图片框以占据面板的整个大小,它会正确排列。这是怎么回事?
图片框定位到顶部、底部、左侧和右侧。无对接。
private void pictureBoxPlot_Paint(object sender, PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawLine(Pens.LightGray,
pictureBoxPlot.Left, pictureBoxPlot.Top,
pictureBoxPlot.Right, pictureBoxPlot.Bottom);
pictureBoxPlot.Invalidate();
}
控件有自己的坐标系,从 (0, 0) 开始,因此可以这样绘制:
e.Graphics.DrawLine(Pens.LightGray,
0, 0, pictureBoxPlot.ClientSize.Width, pictureBoxPlit.ClientSize.Height);
应删除pictureBoxPlot.Invalidate()
,因为这会导致它递归调用自身。 此外,base.OnPaint(e)
看起来不合适,因为您没有覆盖 paint 方法。
我相信坐标是相对于图片框的。 如果你想要左上角和一整行,请使用如下内容:0, 0, pictureBoxPlot.height, pictureBoxPlot.Width
绘制是相对于画布的。您正在尝试绘制框在窗体上的实际位置。使用PictureBoxPlot.ClientSize