一个BubbleCase.cs窗体类,显示泡泡的(类似屏保的泡泡效果),一个Settings.cs窗体类,用于设置泡泡的个数、大小和泡泡移动速度等。第一次先弹出Settings.cs窗口,设置泡泡的个数等,比如设置4个,可是第二次设置的时候如果比4的数目多,就会出错,显示“未将对象引用设置到到对象的实例”的报错信息。错误是 bubbleManager.bubbles[i].dbs.MoveAndDraw(e.Graphics, bubbleManager.bubbles[i].activeColor, this.ClientRectangle, onlyStr[i].ToString());我不知道怎么改才能将对象实例化。请高手求教,这是我的QQ号:274154776,希望高手加我Q亲自指教。我将感激不尽。

解决方案 »

  1.   

    某个对象为空,比如bubbleManager.bubbles不存在。
      

  2.   

    嗯,我知道要实例化,知道出错的地方,可是不知道怎么改才能实现所需功能,放在Form1_Paint事件实例化的话,能运行,但效果与功能不符啊
      

  3.   

    setting  有个运用范围的设置的
      

  4.   

    多于4就报错,那还是你没控制好bubbles数组内部元素的初始化把,比如bubbles[3](第4个元素)你没有初始化
      

  5.   

    代码如下:
    private void Form1_Load(object sender, EventArgs e)
            {
                bubbleManager = new BubbleManager();
                countOFbubble = 8;
                setColor = Color.SkyBlue;
                insideStr = "                    ";//泡泡内置字体默认空格
                speed = 2;
                sizeA = 50;
                sizeB = 230;
                MusicURL = string.Empty;
                sure = true;
                time = false;
                int number = content.SelectNumber();//查找数据库
                if (number == 0)
                {
                    form3.ShowDialog();
                    bubbleManager.initializeBubble(0, countOFbubble, sizeA, sizeB, speed);
                }
                else
                {
                    bubbleManager.initializeBubble(0, countOFbubble, sizeA, sizeB, speed);
                }
                this.timer1.Enabled = true;
                this.timer2.Enabled = true;
                this.timer1.Interval = 100;
                this.timer2.Interval = 2000;
                //播放歌曲
                axWindowsMediaPlayer1.URL = MusicURL;
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
     private void Form1_Paint(object sender, PaintEventArgs e)
            {
                Random rs = new Random();
                //显示时间
                if (time == true)
                {
                    bubbleManager.DrawString(e.Graphics);
                }
                else
                {
                }
                for (int i = 0; i < countOFbubble; i++)
                {
                    //将文本截取为单个字符添入ArrayList
                    onlyStr.Add(insideStr.Substring(i, 1));
                    //获取泡泡的随机颜色
                    if (sure == true)
                    {
                        bubbleManager.bubbles[i].activeColor = bubbleManager.bubbles[i].sleepColor;
                        bubbleManager.bubbles[i].dbs.MoveAndDraw(e.Graphics, bubbleManager.bubbles[i].activeColor, this.ClientRectangle, onlyStr[i].ToString());
                    }
                    else if (sure == false)
                        bubbleManager.bubbles[i].dbs.MoveAndDraw(e.Graphics, setColor, this.ClientRectangle, onlyStr[i].ToString());
                }
            }
    public void initializeBubble(int n,int countOFbubble, int sizeA, int sizeB, int speed)
            {
                Random sleep = new Random();
                //初始化泡泡位置
                for (int  i = n; i < n+countOFbubble; i++)
                {
                    bubbles[i].offX = r.Next(-3, 3);
                    bubbles[i].offY = r.Next(-3, 3);
                }
                //初始化绘制泡泡所需的矩形区域
                for (int k = n; k < n+countOFbubble; k++)
                {
                    bubbles[k].radius = r.Next(sizeA, sizeB);
                    bubbles[k].rect = new Rectangle(0, 0, bubbles[k].radius, bubbles[k].radius);
                }            //初始化泡泡颜色
                for (int i = n; i < n+countOFbubble; i++)
                {
                    bubbles[i].activeColor = Color.Pink;
                }
                //初始停留泡泡颜色
                for (int i = n; i < n+countOFbubble; i++)
                {
                    bubbles[i].sleepColor = Color.FromArgb(sleep.Next(0, 255), sleep.Next(0, 255), sleep.Next(0, 255));
                }            //加载泡泡
                for (int i = n; i < n + countOFbubble; i++)
                {
                    if (PicMan.PicPathList.Count < n+countOFbubble && i >= PicMan.PicPathList.Count)
                    {
                        bubbles[i].dbs = new DrawBubble(bubbles[i].rect, new Point(px + i * 80, py + i * 80), bubbles[i].offX + speed, bubbles[i].offY + speed, "");
                    }
                    else
                    {
                        bubbles[i].dbs = new DrawBubble(bubbles[i].rect, new Point(px + i * 80, py + i * 80), bubbles[i].offX + speed, bubbles[i].offY + speed, PicMan.PicPathList[i]);                }
                }
            }
      

  6.   

    检查
    bubbleManager.bubbles[i].dbs.MoveAndDraw(e.Graphics, bubbleManager.bubbles[i].activeColor, this.ClientRectangle, onlyStr[i].ToString());
    是不是 没有赋值  或者数据为空 最好 能 跟踪过去。
      

  7.   

    加载窗体时,调用initializeBubble()函数初始化泡泡,在任务栏点击设置弹出设置窗口form3,重新设置泡泡的参数,设置泡泡个数时要重新调用initializeBubble()初始化泡泡,该怎么调用才不会报错说没有实例化对象。
      

  8.   

    终于找出办法了,我在设置参数的窗口类新建包含initializeBubble()函数的类是另一个对象而不是显示泡泡窗口的那个实例化对象,我把参数定义成静态的就能实现了,谢谢各位的意见!