自定义控件数据重复的问题
做了一个数据生成曲线的自定义控件测试可以完成预定功能了。但在实际应用中发现。当需要在一个窗体上放置两个该控件分别用于显示温度与压力时,当一个控件载入数据后,控件B没有载入数据也跟着画出和控件A一样的数据曲线。
经查,控件内部未设置静态变量。不知是何原因。
请大侠们指明个方向!
[解决办法]
自己好好想想吧。这是你必然经历的bug,过了这个阶段你才真正会设计控件。
设计“一”不算本事,会把它服用到“二”以上才能发现bug。任何控件都应该在一开始编码时,就随时在宿主上放上好几个来测试,一边测试一边开发。等你自认为编写完了才去放上两个控件实例来测试,这时候已经晚了,你需要推倒重来从头开始考虑自己是否真的理解了控件开发方法。
[解决办法]
给你个例子,自己扩充吧
//自定义绘图类,里面包含以下代码 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 或者使用了非线程安全的东西,两线程互相串改数据??