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

解决方案 »

  1.   

    当然了,你用的都是同一个自定义控件,实现的都是同一个功能,要满足你的要求,你可以设计两个类,非别处理不同的画图要求,你的usercontrol中创建他们的接口,根据你的需求创建不同的绘图类
      

  2.   

    我看窗体设计里的代码,拖动窗体是NEW了一个呀?两个之间为什么还会重复叱?
      

  3.   

    其实两个图功能是一样的。只不过显示不同的数据而已。现在是功能能实现了。但两个控件的数据总相互影响。不明白怎么回事,像BUTTON 我放到FORM上N个后可以实现不同的功能。
      

  4.   

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

  5.   

    给你个例子,自己扩充吧//自定义绘图类,里面包含以下代码    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;
      

  6.   


    这个也有点太懒了。你应该学会设置断点、使用Watch窗口、使用callstack窗口去跳入调用堆栈的深处,去调试当时的变量值和跟踪调用堆栈的逻辑。自己先调试,然后提出问题。不要仅仅用别人随便说的一两个词儿当作救命稻草。
      

  7.   

    很难想象是啥错,单从毛病上起码可以想到5,6种常见的错误
    1.是lz自己提到的静态
    2.直接引用了对象,而不是new滴
    3.公用了数据源
    4.dc获取错了??
    5 或者使用了非线程安全的东西,两线程互相串改数据??