我在窗口2下获得了数据,然后要赋值给窗口7的ZedGraph显示,要怎么做??我是怎么做的:先将窗口7的zedgraph定义为public;
然后在窗口7中定义一个公共的zedgraph显示函数,接着再窗口2中获得了数据后,再用这个公共函数,最后达到显示的目的;代码如下:
窗口2:
private void timer1_Tick(object sender, EventArgs e)//时钟到了触发,100ms一次
        {
Form7 form7 = new Form7();
int num = Hexstringtoint(receive.Substring(1, 2));
int num2 = Hexstringtoint(receive.Substring(3, 2));
int num3 = Hexstringtoint(receive.Substring(5, 2));
int num4 = Hexstringtoint(receive.Substring(7, 2));
form7.zedgraphdisplay(wavedisplayx, num, num2, num3, num4);
wavedisplayx+=100;
注:其中Hexstringtoint函数将16进制字符串转为整数,我中断看了,num到num4都是有数据的,都是没错的,是有数据的;窗口7:
public void zedgraphdisplay(int a, int b, int c, int d, int e)
        {
            list.Add(a, b);
            list2.Add(a, c);
            list3.Add(a, d);
            list4.Add(a, e);
            zg1.AxisChange();
            zg1.Invalidate();
        }运行后在窗口7中应该得到100ms一个周期的波形图,但是为什么实际是窗口7的zedgraph中什么东西都没有,一直为空呢???

解决方案 »

  1.   

    感谢happy09li的回复,但我没看懂你的意思能给出代码么?
      

  2.   

    窗口2:
    private void timer1_Tick(object sender, EventArgs e)//时钟到了触发,100ms一次
      {
    int num = Hexstringtoint(receive.Substring(1, 2));
    int num2 = Hexstringtoint(receive.Substring(3, 2));
    int num3 = Hexstringtoint(receive.Substring(5, 2));
    int num4 = Hexstringtoint(receive.Substring(7, 2));
    Form7 form7 = new Form7(wavedisplayx,num ,num2,num3,num4);
    form7.show();
    }
    窗口7:public from7()
      {
      InitializeComponent();
    }public from7(int a, int b, int c, int d, int e)
      {
      InitializeComponent();
      list.Add(a, b);
      list2.Add(a, c);
      list3.Add(a, d);
      list4.Add(a, e);
      zg1.AxisChange();
      zg1.Invalidate();
    zedgraphdisplay(a,  b, c, d,e);
      }
      

  3.   


    这个还有问题,,没看到你用的是Timer控件,,,应该委托事件的
      

  4.   

    感谢happy09li的回复
    您的代码我试了一下,好像有问题,我是这样写的(窗口2主窗体,窗口1是zedgraph分窗口)窗口2主窗体:
     private void Form2_Load(object sender, EventArgs e)
            {
                System.Windows.Forms.Timer time1 = new System.Windows.Forms.Timer();
                time1.Tick += new EventHandler(timer1_Tick);//添加timer的“滴答”事件
                time1.Interval = 100;//时钟的间隔为100ms
                time1.Start();//时间开始启动
                i = 0;
            }public void timer1_Tick(object sender, EventArgs e)
            {
                int x = (int)i * 5;
                int y = (int)i * 4;
                int y2 = (int)i * 3;
                int y3 = (int)i * 2;
                int y4 = (int)i * 1;
                i++;
                Form1 form1 = new Form1(x, y, y2, y3, y4);
                form1.Show();
    }zedgraph分窗口:
    public Form1(int a, int b, int c, int d, int e)
            {
                list.Add(a, b);
                list2.Add(a, c);
                list3.Add(a, d);
                list4.Add(a, e);
                zg1.AxisChange();
                zg1.Invalidate();
                //zeddisplay(a,b,c,d,e);
            }注:其中您给的2条代码不能加上“InitializeComponent(),加上一直会初始化,弹出N个窗口;zedgraphdisplay(a,  b, c, d,e)我不知道加哪里,因为这个函数被去掉了)执行后,发现”zg1.AxisChange();”命令行处出现错误“未将对象引用到设置对象的实例”这是为什么呢?还有:我的自己的第一中方法:若果zedgraph和time_tick函数在同一个窗口下,那么是可以调用zedgraphdisplay函数来显示的,为正确;
                                但是如果zedgraph和time_tick函数在不用窗口下,那么同样的函数调用,分窗口下的zedgraph是没有任何显示的?这又是为什么呢??
      

  5.   

    “这个还有问题,,没看到你用的是Timer控件,,,应该委托事件的”请问这个是什么意思??
    应该怎么做?请不要神龙见首不见尾啊
      

  6.   

    再试试,应该可以了窗口2:
    private void timer1_Tick(object sender, EventArgs e)//时钟到了触发,100ms一次
      {int num = Hexstringtoint(receive.Substring(1, 2));
    int num2 = Hexstringtoint(receive.Substring(3, 2));
    int num3 = Hexstringtoint(receive.Substring(5, 2));
    int num4 = Hexstringtoint(receive.Substring(7, 2));
      wavedisplayx+=100;
    Form7 form7 =GetInstance(wavedisplayx,num ,num2,num3,num4);
    form7.ShowDialog();
    }        Form7 form = null;
            public  Form7  GetInstance(int a, int b, int c, int d, int e)
            {
                if (form == null || form.IsDisposed)
                {
                    form = new Form7();
                }
                form7.zedgraphdisplay(a, b, c, d, e); 
                return form;
            }
      

  7.   

    我现在非常的乱 我还没有去试happy09li给的代码,吃晚饭在试,但是我就想问一个东西!!: 
    根据我的嘴开始的方法(见本帖最上端我的问题),我用中断模式调试,发现当进入
    public void zedgraphdisplay(int a, int b, int c, int d, int e)
      {
      list.Add(a, b);
      list2.Add(a, c);
      list3.Add(a, d);
      list4.Add(a, e);
      zg1.AxisChange();
      zg1.Invalidate();
      }
    这个中断的时候检测变量a,b,c,d,e都死明确有数值的,但是就他 吗 的 没给显示!!!这到底是为什么???我降2个函数(接收数据 和 显示图形)放到一个窗口下(zedgraph的窗口)就好了 这到底是为什么?
      

  8.   


    Form7 form7 = new Form7();
    int num = Hexstringtoint(receive.Substring(1, 2));
    int num2 = Hexstringtoint(receive.Substring(3, 2));
    int num3 = Hexstringtoint(receive.Substring(5, 2));
    int num4 = Hexstringtoint(receive.Substring(7, 2));
    form7.zedgraphdisplay(wavedisplayx, num, num2, num3, num4);
    wavedisplayx+=100;你这样只是赋值了,,但是没有让from7显示出来,,,
    就好比你在游戏中买了装备,但是没有进游戏,所以你看不到你的装备
      

  9.   

    嗯 感谢happy09li
     我的问题解决了。