自定义控件数据重复的问题 做了一个数据生成曲线的自定义控件测试可以完成预定功能了。但在实际应用中发现。当需要在一个窗体上放置两个该控件分别用于显示温度与压力时,当一个控件载入数据后,控件B没有载入数据也跟着画出和控件A一样的数据曲线。经查,控件内部未设置静态变量。不知是何原因。请大侠们指明个方向! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当然了,你用的都是同一个自定义控件,实现的都是同一个功能,要满足你的要求,你可以设计两个类,非别处理不同的画图要求,你的usercontrol中创建他们的接口,根据你的需求创建不同的绘图类 我看窗体设计里的代码,拖动窗体是NEW了一个呀?两个之间为什么还会重复叱? 其实两个图功能是一样的。只不过显示不同的数据而已。现在是功能能实现了。但两个控件的数据总相互影响。不明白怎么回事,像BUTTON 我放到FORM上N个后可以实现不同的功能。 自己好好想想吧。这是你必然经历的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; 这个也有点太懒了。你应该学会设置断点、使用Watch窗口、使用callstack窗口去跳入调用堆栈的深处,去调试当时的变量值和跟踪调用堆栈的逻辑。自己先调试,然后提出问题。不要仅仅用别人随便说的一两个词儿当作救命稻草。 很难想象是啥错,单从毛病上起码可以想到5,6种常见的错误1.是lz自己提到的静态2.直接引用了对象,而不是new滴3.公用了数据源4.dc获取错了??5 或者使用了非线程安全的东西,两线程互相串改数据?? c#窗体程序调用oracle存储过程返回ref cursor 标题长=====list<>索引超出数组界限 关于线程锁的对象的问题 使用C#实现从本机向服务器某文件夹下拷贝文件如何实现? web service调用有问题,调用helloworld就抱错,错误如下: wince6.0 设备 打印定长字符串问题 IIS服务器不能用了 C# winform 窗体标志有什么区别,怎么做的 服務中的線程問題!!!!!(急)100分 在C#中要使Enter键实现Tab键的功能,要如何处理? C#窗体调用类的问题,求助! C#中与数据库连接查询语句的问题……
{
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;
这个也有点太懒了。你应该学会设置断点、使用Watch窗口、使用callstack窗口去跳入调用堆栈的深处,去调试当时的变量值和跟踪调用堆栈的逻辑。自己先调试,然后提出问题。不要仅仅用别人随便说的一两个词儿当作救命稻草。
1.是lz自己提到的静态
2.直接引用了对象,而不是new滴
3.公用了数据源
4.dc获取错了??
5 或者使用了非线程安全的东西,两线程互相串改数据??