DrawLine:顶部和左侧不正确

时间:2013-12-19 23:24:00

标签: c# winforms graphics picturebox

我有一个自定义控件,它由一个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();
}

3 个答案:

答案 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