一个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亲自指教。我将感激不尽。
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]); }
}
}
bubbleManager.bubbles[i].dbs.MoveAndDraw(e.Graphics, bubbleManager.bubbles[i].activeColor, this.ClientRectangle, onlyStr[i].ToString());
是不是 没有赋值 或者数据为空 最好 能 跟踪过去。