要是不嫌代码多,就来帮我找找我的问题,我就是个散分的!

ELement_DG 2010-02-05 09:10:25
首先需求提出:
抽奖从5等奖开始 有200个中奖名额 一次抽出50个人 分4次抽; (换言之,分别需要50个PictureBox和Label,然后其中的图片翻滚)
4等奖开始 有100个中奖名额 一次抽出50个人 分2次抽; (换言之,分别需要50个PictureBox和Label,然后其中的图片翻滚)
3等奖开始 有50个中奖名额 一次抽出25个人 分2次抽; (换言之,分别需要25个PictureBox和Label,然后其中的图片翻滚)
2等奖开始 有20个中奖名额 一次抽出10个人 分2次抽; (换言之,分别需要10个PictureBox和Label,然后其中的图片翻滚)
1等奖开始 有10个中奖名额 一次抽出10个人 分1次抽; (换言之,分别需要10个PictureBox和Label,然后其中的图片翻滚)
特等奖开始 有2个中奖名额 一次抽出2个人 分1次抽; (换言之,分别需要2个PictureBox和Label,然后其中的图片翻滚)

要求:
界面上必须是图片在翻滚,然后停止,展示中奖人照片和姓名,在后台,参与抽奖的人有1500个人,照片都很小77*83的

目前进展:
程序已经运行没有问题,翻滚的速度也行,中奖者不会重复;

功能实现上:
进入主程序,按5,打开5等奖抽奖窗体,抽奖完毕;按4,打开4等奖抽奖窗体...以此类推

目前情况:
因为要分6次抽奖,所以我做了8个窗体:frmMain(欢迎界面) frmEnd(结束界面) frmFive(5等奖) frmFour(4等奖) frmThree(3等奖) frmTwo(2等奖) frmOne(1等奖) frmSpecial(特等奖);
另外做了一个封装类A,封装的是PictureBox和Label,确保抽奖停止时,图片和名称对应上;
做了一个数据连接类DBManager,连接一个Excel表,表里面是ID(索引)、Name(姓名)、Part(部门);
做了一个处理类Bizz,里面有一个方法,是获取Excel表里所有参与者的资料;

目前问题:
如果给8个窗体都加上背景图片,就是给BackgroundImage添加值,程序整体运行就开始慢了,而且是非常非常慢,跟打印东西一样,

我贴出frmMain和frmFive的代码,大家帮我看看,是不是哪里不太合理,其他代码差不多,都是在frmFive基础上减少了部分PictureBox和Label

...全文
179 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckl881003 2010-02-09
  • 打赏
  • 举报
回复
lz的问题还没解决啊。。。
加油加油
其实你如果时间还来得及的话。。还是用GDI+直接绘图吧,直接在窗口上绘,你控件多了本身就会慢在加上透明这东西又特别费资源
还有我猜测你设透明是为了在还没开始滚动的时候这个界面就只显示一张背景是这样么?如果是这样的话那就先把PICTUREBOX给隐藏掉就可以了
chentian5201931 2010-02-09
  • 打赏
  • 举报
回复
哇塞,好辛苦的回答!!!!!!
-汪帆- 2010-02-09
  • 打赏
  • 举报
回复
把控件的透明背景去掉即可
csdn雨藤 2010-02-06
  • 打赏
  • 举报
回复
很多……
别递烟哥不会 2010-02-06
  • 打赏
  • 举报
回复
确实很多
Delta 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 jianshao810 的回复:]
确实强
[/Quote]厉害
billlyh 2010-02-06
  • 打赏
  • 举报
回复
试试先不要设置背景,等窗体显示完毕时再载入背景图片。
jianshao810 2010-02-06
  • 打赏
  • 举报
回复
确实强
kingcsx666 2010-02-05
  • 打赏
  • 举报
回复
mark
xiaowang1026 2010-02-05
  • 打赏
  • 举报
回复
可能是由于背景图片造成的,我以前也遇到过,可以将图片的稍微,或者改用其他格式的试一下
ELement_DG 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 wiki14 的回复:]
改进代码,用双缓冲,异步线程
[/Quote]

对我来说,双缓冲我第一次接触,异步线程从来没试过,具体怎么实现呢?
我也知道要进行代码优化,可是具体优化哪里?我感觉可能要把类似
A a1 = new A();
a1.PicBox = this.pictureBox1;
a1.Lb = this.label1;
alist.Add(a1);
......
这里改写,但是需要把界面上一个PictureBox和一个Label对应着放入到一个A类中,然后最终全部加入集合中去,还有什么方法可以替代这样冗长的代码段?
我之前试过===
foreach(Control c in this.Controls)
{
A a = new A();
if(c is PictureBox)
{
a.PicBox = (PictureBox)c;

}
if(c is Label)
{
a.Lb = (Label)c;
}
alist.Add(a);
}

可是很明显不对
龙宜坡 2010-02-05
  • 打赏
  • 举报
回复
确实多,慢慢看
wiki14 2010-02-05
  • 打赏
  • 举报
回复
改进代码,用双缓冲,异步线程
ELement_DG 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wiki14 的回复:]
界面上应该越简单控件越少越好。
控件多了容易慢,你没有设置什么透明啊什么的效果吧?

尝试开启双缓冲,在窗体的构造函数中添加这行代码:
C# codethis.SetStyle(ControlStyles.AllPaintingInWmPaint|ControlStyles.UserPaint|ControlStyles.OptimizedDoubleBuffer,true);
[/Quote]

我试了双缓存,但是还是很慢,从欢迎界面进入5等奖抽奖界面,背景图片先加载上了,但是控件显示透明效果,像打印机一样,慢慢的,一个个才慢慢打开
ronaltn 2010-02-05
  • 打赏
  • 举报
回复
尽量使用小容量的图片。
wiki14 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 element_dg 的回复:]
你说对了,我对PictureBox和Label设置了透明,结果其慢,我也想用一个PictureBox和Label,然后用算法循环出50个图片框来,但是内种算法,我没思路
[/Quote]


......

呵呵
wzuomin 2010-02-05
  • 打赏
  • 举报
回复
帮顶
抽时间慢慢看
ELement_DG 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wiki14 的回复:]
界面上应该越简单控件越少越好。
控件多了容易慢,你没有设置什么透明啊什么的效果吧?

尝试开启双缓冲,在窗体的构造函数中添加这行代码:
C# codethis.SetStyle(ControlStyles.AllPaintingInWmPaint|ControlStyles.UserPaint|ControlStyles.OptimizedDoubleBuffer,true);
[/Quote]

你说对了,我对PictureBox和Label设置了透明,结果其慢,我也想用一个PictureBox和Label,然后用算法循环出50个图片框来,但是内种算法,我没思路
wiki14 2010-02-05
  • 打赏
  • 举报
回复
界面上应该越简单控件越少越好。
控件多了容易慢,你没有设置什么透明啊什么的效果吧?

尝试开启双缓冲,在窗体的构造函数中添加这行代码:

this.SetStyle(ControlStyles.AllPaintingInWmPaint|ControlStyles.UserPaint|ControlStyles.OptimizedDoubleBuffer,true);
ELement_DG 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 s314324153 的回复:]
应该是图片占得内存问题
[/Quote]

但是程序肯定不能是光杆,肯定得配置背景图片
加载更多回复(12)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧