求助,自定义控件无法显示
控件定义代码如下:
public partial class Line : UserControl
{
private Point start;
private Point end;
public Line()
{
InitializeComponent();
}
public Line(Point start, Point end)
: this()
{
this.start = start;
this.end = end;
}
public Point Start
{
get
{
return this.start;
}
set
{
this.start = value;
}
}
public Point End
{
get
{
return this.end;
}
set
{
this.end = value;
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Pen pen = new Pen(Color.Black);
e.Graphics.DrawLine(pen, this.Start, this.End);
}
}
主窗体中代码如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Line line1 = new Line(new Point(10, 10), new Point(100, 10));
Line line2 = new Line(new Point(10, 100), new Point(100, 100));
this.Controls.Add(line1);
this.Controls.Add(line2);
}
}
为什么运行时只能显示一条直线啊?
------解决方案--------------------
你的:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Pen pen = new Pen(Color.Black);
e.Graphics.DrawLine(pen, this.Start, this.End);
}
改为:
public Line(Point start, Point end)
: this()
{
this.start = start;
this.end = end;
this.Location = start;
this.Width = end.X - start.X;
this.Height = 10;
//this.BackColor = Color.Tomato;
this.BorderStyle = BorderStyle.Fixed3D;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Pen pen = new Pen(c,10f);
//错在这里, 请注意, 现在你是在你的UserControl里画线,不是在Form里, 所以你的start和end的坐标是给Form,不是你的Control的。
//
e.Graphics.DrawLine(pen,new Point(0,0),new Point(this.Width,0));
}
------解决方案--------------------Line是个窗体?
这样设计似乎不太好,画一条线多一个窗体,这样很占资源的。
应该要自己绘图,重载鼠标事件进行模拟。
就算Line是窗体,也应该从Control继承,而不是UserControl
难道Line还要包含子控件?它还是组合控件?
这种东西要做的话,Line应该是个图形(自定义类),它可以实现某个统一接口(如绘图、响应鼠标事件等)
然后再从Control继承,做一个容器,用来绘制你定义的这种线条(类似于画板)
然后窗体上放一个画板。。。
------解决方案--------------------呵!你试试 两个Text属性不同的Button重合在一起看看是不是都能看到他们的Text