【发布时间】:2011-05-24 16:27:09
【问题描述】:
我是第一次创建自定义控件,我将其作为代码的一部分:
protected Pen pen;
protected Color lineColor = Color.Green;
protected double xMin = -10, xMax = 10, yMin = -10, yMax = 10;
protected double[] data;
public Graph()
{
InitializeComponent();
pen = new Pen(new SolidBrush(lineColor), 1);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if(yMin <= 0 || yMax >= 0)
{
double yDifference = Math.Abs(yMin) + Math.Abs(yMax);
double xAxisHeight = (Math.Abs(yMin) / yDifference) * Height;
e.Graphics.DrawLine(pen, new Point(0, (int)xAxisHeight), new Point(Width, (int)xAxisHeight));
}
}
但由于某种原因,onPaint 函数中的 xMin、xMax、yMin 和 yMax 始终为 0。
编辑:
这是来自 Graph.cs 的其余代码
The only this I wasn't showing was this :
public double XMin
{
get { return xMin; }
set
{
xMin = value;
this.Invalidate();
}
}
public double XMax
{
get { return xMax; }
set
{
xMax = value;
this.Invalidate();
}
}
public double YMin
{
get { return yMin; }
set
{
yMin = value;
this.Invalidate();
}
}
public double YMax
{
get { return yMax; }
set
{
yMax = value;
this.Invalidate();
}
}
public double[] Data
{
get { return data; }
set
{
data = value;
this.Invalidate();
}
}
public Color LineColor
{
get { return lineColor; }
set
{
lineColor = value;
pen = new Pen(new SolidBrush(lineColor), 1);
this.Invalidate();
}
}
【问题讨论】:
-
我敢打赌,它在您未发布的代码中某处被设置为 0。
-
调用base.OnPaint之前的值是0吗?
-
是的,我通过在构造函数处停止代码进行了检查,一切正常。