如何解决带变量的自定义控制问题
| 我是第一次创建自定义控件,并将其作为代码的一部分: 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();
}
}
解决方法
jimmy_keen的答案是正确的。如果控件上具有任何公共属性,则设计器将提供用于配置它们的UI。如果您不配置它们,那么设计器会将所有属性设置为其默认值-在这种情况下为would2ѭ(即
0
),而不是您最初在代码中设置的值。
但是解决方案不是直接编辑*.Designer.cs
文件中的代码,因为Visual Studio会将其放回去。而是在Designer中转到自定义控件的属性,然后设置一些有用的值。
或者,如果您确实不想使用设计器配置控件,则可以使用如下代码:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
public double XMin
{
get { return xMin; }
set
{
xMin = value;
this.Invalidate();
}
}
有关详细信息,请参见ѭ6上的文档。
,设计器很可能会将您的属性设置为默认值0。
尝试使用DefaultValue
属性,只需确保两个值(使用属性初始化字段的字段和默认值两个)都相同:
private double xMin = -10;
[DefaultValue(-10)]
public double XMin
{
get { return xMin; }
set
{
xMin = value;
this.Invalidate();
}
}
,如果设计人员将它们设置回零,请在“初始化组件”之后设置值。例如
InitializeComponent();
xMin = -10;
xMax = 10;
yMin = -10;
yMax = 10;
因为它将在初始化组件内部将它们设置为0,该值应该在构造函数外部的之后。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。