C# 抽绳:顶部和左侧不正确
我有一个自定义控件,它由一个面板和一个较小的pictureBox组成。在pictureBox中从左、从上到右、从下绘制线时,起点不从pictureBox的角开始,而是偏移+x和+y。如果我展开pictureBox以占据面板的整个尺寸,它将正确对齐。发生什么事了 pictureBox固定在顶部、底部、左侧和右侧。禁止停靠C# 抽绳:顶部和左侧不正确,c#,winforms,graphics,picturebox,C#,Winforms,Graphics,Picturebox,我有一个自定义控件,它由一个面板和一个较小的pictureBox组成。在pictureBox中从左、从上到右、从下绘制线时,起点不从pictureBox的角开始,而是偏移+x和+y。如果我展开pictureBox以占据面板的整个尺寸,它将正确对齐。发生什么事了 pictureBox固定在顶部、底部、左侧和右侧。禁止停靠 private void pictureBoxPlot_Paint(object sender, PaintEventArgs e) { base.OnPaint(e);
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);
应该删除
PictureBexplot.Invalidate()
,因为这会导致它递归地调用自身。另外,base.OnPaint(e)
看起来不合适,因为您没有覆盖绘制方法。控件有自己的坐标系,从(0,0)开始,因此请按如下方式绘制:
e.Graphics.DrawLine(Pens.LightGray,
0, 0, pictureBoxPlot.ClientSize.Width, pictureBoxPlit.ClientSize.Height);
应该删除
PictureBexplot.Invalidate()
,因为这会导致它递归地调用自身。另外,base.OnPaint(e)
看起来不合适,因为您没有覆盖绘制方法。我相信坐标是相对于图片框的。如果您想要左上角和一条完整的线,请使用以下内容:0,0,picturebexplot.height,picturebexplot.Width
我相信坐标是相对于图片框的。如果您想要左上角和一条完整的线,请使用类似以下内容:0,0,picturebexplot.height,picturebexplot.Width
绘制是相对于画布的。您正在尝试绘制框在窗体上的实际位置。使用PictureBExplot.ClientSize绘图是相对于画布的。您正在尝试绘制框在窗体上的实际位置。使用picturebexplot.ClientSize
当您还可以使用面板的绘制事件时,为什么要使用额外的控件。除了控制面板中非零位置的偏移之外,PictureBox还更改e.Graphics对象以实现SizeMode属性。当然,这是这里的位置属性。使用PictureBox将Double Buffered属性设置为true是一种非常昂贵的方法。因为我是在父级区域(以及父级区域以外)内绘制的,所以我使用了其他控件,并认为OnPaint()会更新它们。。。第一次为我写绘图代码。。。谢谢。这就引出了一个问题:当您还可以使用面板的绘制事件时,为什么要使用额外的控件。除了控制面板中非零位置的偏移之外,PictureBox还更改e.Graphics对象以实现SizeMode属性。当然,这是这里的位置属性。使用PictureBox将Double Buffered属性设置为true是一种非常昂贵的方法。因为我是在父级区域(以及父级区域以外)内绘制的,所以我使用了其他控件,并认为OnPaint()会更新它们。。。第一次为我写绘图代码。。。谢谢。我的头撞在墙上好几个小时了!我删除了OnPaint()和Invalidate()。工作如期-谢谢!我的头撞在墙上好几个小时了!我删除了OnPaint()和Invalidate()。工作如期-谢谢!这可能就是我注意到其他控制装置被冲洗的原因。谢谢这可能就是我注意到其他控制装置被冲洗的原因。谢谢