C# 让一堆Panel 闪烁红灯 节奏不一样 求助

GEshaoyebuhuaxin 2017-01-23 04:24:27
如下代码部分,用计时器控制Panel闪烁的频率 但是效果却非常丑,尽管闪烁周期一样 但是节奏完全不一样 乱了套了,求助好方法可以使得这些Panel 一样的节奏闪烁。


time1.Tick += panelStatusChangedTick;

private void panelStatusChangedTick(object sender, EventArgs e)
{
foreach(Panel item in panelToFlashList)
{
if (item.BackColor == Color.Red)
{
item.Parent = pictureBox1;
item.BackColor = Color.Transparent;
}
else
{
item.BackColor = Color.Red;
}

}

}
...全文
464 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
GEshaoyebuhuaxin 2017-01-24
  • 打赏
  • 举报
回复
引用 10 楼 yuankaiwsl 的回复:
建议你还是画上去吧,是在一个PictureBox上显示很多panel吗?那就通过这个PictureBox的Paint事件去处理
thank you very much
巴士上的邂逅 2017-01-24
  • 打赏
  • 举报
回复
建议你还是画上去吧,是在一个PictureBox上显示很多panel吗?那就通过这个PictureBox的Paint事件去处理
GEshaoyebuhuaxin 2017-01-24
  • 打赏
  • 举报
回复
引用 8 楼 yuankaiwsl 的回复:
不加这句item.Parent = pictureBox1;不行吗?
加这句是为了 闪烁为透明的时候下面是图片而不是窗体,不然会特别难看
巴士上的邂逅 2017-01-24
  • 打赏
  • 举报
回复
不加这句item.Parent = pictureBox1;不行吗?
GEshaoyebuhuaxin 2017-01-24
  • 打赏
  • 举报
回复
引用 6 楼 yuankaiwsl 的回复:
ps.AsParallel().ForAll(p =>{ p.Parent = pictureBox1;p.BackColor = Color.Red;});


引用 6 楼 yuankaiwsl 的回复:
ps.AsParallel().ForAll(p =>{ p.Parent = pictureBox1;p.BackColor = Color.Red;});



我试过,但是不知道什么原因会异常
巴士上的邂逅 2017-01-24
  • 打赏
  • 举报
回复
ps.AsParallel().ForAll(p =>{ p.Parent = pictureBox1;p.BackColor = Color.Red;});
GEshaoyebuhuaxin 2017-01-24
  • 打赏
  • 举报
回复
引用 4 楼 yuankaiwsl 的回复:
类似这样的就行
bool on = false;
        void timer_Tick(object sender, EventArgs e)
        {
            var ps = new List<Panel>() { panel1, panel2, panel3, panel4, panel5, panel6, panel7, panel8, panel9, panel10, panel11, panel12, panel13, panel14, panel15, panel16 };
            if (on)
                ps.AsParallel().ForAll(p => p.BackColor = Color.Red);
            else
                ps.AsParallel().ForAll(p => p.BackColor = Color.Transparent);
            on = !on;
        }
item.Parent = pictureBox1; 我这边有个需要透明的时候,需要改父体的,完全不好加啊。
巴士上的邂逅 2017-01-23
  • 打赏
  • 举报
回复
类似这样的就行
bool on = false;
        void timer_Tick(object sender, EventArgs e)
        {
            var ps = new List<Panel>() { panel1, panel2, panel3, panel4, panel5, panel6, panel7, panel8, panel9, panel10, panel11, panel12, panel13, panel14, panel15, panel16 };
            if (on)
                ps.AsParallel().ForAll(p => p.BackColor = Color.Red);
            else
                ps.AsParallel().ForAll(p => p.BackColor = Color.Transparent);
            on = !on;
        }
GEshaoyebuhuaxin 2017-01-23
  • 打赏
  • 举报
回复
引用 1 楼 yuankaiwsl 的回复:
试试panelToFlashList.AsParallel().ForAll()
说的具体一点呢
xinweilee 2017-01-23
  • 打赏
  • 举报
回复
不如用gdi+自己绘制,如 using (Bitmap bitmap = new Bitmap(Width, Height)) { using (Graphics g = Graphics.FromImage(bitmap)) { //将panel换成rectangle g.FillRectangle(Color.Red, rect1); g.FillRectangle(Color.Red, rect2); g.FillRectangle(Color.Red, rect3); g.FillRectangle(Color.Red, rect4); } e.Graphics.DrawImage(bitmap,new Point(0,0,)); } 然后在定时器中调用Invalidate();
巴士上的邂逅 2017-01-23
  • 打赏
  • 举报
回复
试试panelToFlashList.AsParallel().ForAll()

110,534

社区成员

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

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

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