读书人

,自定义控件无法显示

发布时间: 2012-01-02 22:40:04 作者: rapoo

求助,自定义控件无法显示
控件定义代码如下:
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

读书人网 >C#

热点推荐