首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

自定义控件数据重复的有关问题

2012-04-04 
自定义控件数据重复的问题做了一个数据生成曲线的自定义控件测试可以完成预定功能了。但在实际应用中发现。

自定义控件数据重复的问题
做了一个数据生成曲线的自定义控件测试可以完成预定功能了。但在实际应用中发现。当需要在一个窗体上放置两个该控件分别用于显示温度与压力时,当一个控件载入数据后,控件B没有载入数据也跟着画出和控件A一样的数据曲线。
经查,控件内部未设置静态变量。不知是何原因。
请大侠们指明个方向!

[解决办法]
自己好好想想吧。这是你必然经历的bug,过了这个阶段你才真正会设计控件。

设计“一”不算本事,会把它服用到“二”以上才能发现bug。任何控件都应该在一开始编码时,就随时在宿主上放上好几个来测试,一边测试一边开发。等你自认为编写完了才去放上两个控件实例来测试,这时候已经晚了,你需要推倒重来从头开始考虑自己是否真的理解了控件开发方法。
[解决办法]
给你个例子,自己扩充吧

C# code
//自定义绘图类,里面包含以下代码    public interface IMyDraw   //绘图接口    {        void Draw(System.Drawing.Graphics g);    }    public class MyDraw_Circle : IMyDraw  //绘制圆形类    {        public void Draw(System.Drawing.Graphics g)        {            g.DrawEllipse(System.Drawing.Pens.Red, new System.Drawing.Rectangle(0, 0, 100, 100));        }    }    public class MyDraw_Rect : IMyDraw  //绘制矩形类    {        public void Draw(System.Drawing.Graphics g)        {            g.DrawRectangle(System.Drawing.Pens.Red, new System.Drawing.Rectangle(0, 0, 100, 100));        }    }//自定义组件using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{    public partial class UserControl1 : UserControl    {        IMyDraw _mydraw;        public UserControl1()        {            InitializeComponent();        }        public UserControl1(IMyDraw mydraw)  //自定义构造,传入绘图接口        {            _mydraw = mydraw;        }        protected override void OnPaint(PaintEventArgs e)        {            _mydraw.Draw(e.Graphics); //调用接口的Draw            base.OnPaint(e);        }    }}调用            UserControl1 u = new UserControl1(new MyDraw_Circle());//这个绘制圆形            u.Parent = this;            u.Left = 0;            u.Top = 300;            u = new UserControl1(new MyDraw_Rect());//这个绘制矩形            u.Parent = this;            u.Left = 200;            u.Top = 300;
[解决办法]
很难想象是啥错,单从毛病上起码可以想到5,6种常见的错误
1.是lz自己提到的静态
2.直接引用了对象,而不是new滴
3.公用了数据源
4.dc获取错了??
5 或者使用了非线程安全的东西,两线程互相串改数据??

热点排行