我有一个自定义控件,它由一个Panel和一个较小的pictureBox组成。当我从PictureBox中的Left,Top到Right,Bottom DrawLine时,起始点不会从pictureBox的角落开始,并且偏移+ x和+ y。如果我展开pictureBox以占用Panel的整个大小,它会正确排列。发生了什么事?
图片框固定在顶部,底部,左侧和右侧。没有停靠。
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 :(得分:4)
控件有自己的坐标系,从(0,0)开始,所以绘制它:
e.Graphics.DrawLine(Pens.LightGray,
0, 0, pictureBoxPlot.ClientSize.Width, pictureBoxPlit.ClientSize.Height);
应删除pictureBoxPlot.Invalidate()
,因为这会导致它以递归方式调用自身。此外,base.OnPaint(e)
看起来不合适,因为您没有覆盖绘制方法。
答案 1 :(得分:1)
我相信坐标是相对于图片框的。如果您想要左上角和整行,请使用以下内容:0, 0, pictureBoxPlot.height, pictureBoxPlot.Width
答案 2 :(得分:1)
绘图是相对于画布的。您正在尝试绘制框的实际位置所在的位置。使用PictureBoxPlot.ClientSize