Spiga

C#模拟MSN窗体抖动[原创]

2006-12-20 22:56 by 农夫三拳, 1203 visits, 收藏, 编辑

C#模拟MSN窗体抖动

窗体抖动是件很有意思的事情,就让我们看看一起来看看它的原理吧。 
其实是生成随机数,然后改变Form的左上角的坐标。
我用的是循环来弄得,其实可以用timer来控制.

 我把抖动分成了两种抖动:
1。 生成随机数,改变窗体左上角坐标,然后立即把窗体的坐上角坐标还原,继续循环。
2。 生成随机数,改变窗体左上角坐标,循环完毕之后,然后立即把窗体的坐上角坐标还原。

核心代码如下:

//第一种抖动
        private void button1_Click(object sender, EventArgs e)
        
{
            
int recordx = this.Left;            //保存原来窗体的左上角的x坐标
            int recordy = this.Top;             //保存原来窗体的左上角的y坐标

            Random random 
= new Random();       

            
for (int i = 0; i < 100; i++)
            
{
                
int x = random.Next(rand);
                
int y = random.Next(rand);
                
if (x % 2 == 0)
                
{
                    
this.Left = this.Left + x;
                }

                
else
                
{
                    
this.Left = this.Left - x;
                }

                
if (y % 2 == 0)
                
{
                    
this.Top = this.Top + y;
                }

                
else
                
{
                    
this.Top = this.Top - y;
                }


                
this.Left = recordx;            //还原原始窗体的左上角的x坐标
                this.Top = recordy;             //还原原始窗体的左上角的y坐标
            }

           
        }

 


        
//第二种抖动
        private void button2_Click(object sender, EventArgs e)
        
{
            
int recordx = this.Left;
            
int recordy = this.Top;
            Random random 
= new Random();
            
for (int i = 0; i < 50; i++)
            
{
                
int x = random.Next(rand);
                
int y = random.Next(rand);
                
if (x % 2 == 0)
                
{
                    
this.Left = this.Left + x;
                }

                
else
                
{
                    
this.Left = this.Left - x;
                }

                
if (y % 2 == 0)
                
{
                    
this.Top = this.Top + y;
                }

                
else
                
{
                    
this.Top = this.Top - y;
                }

                System.Threading.Thread.Sleep(
1);
            }

            
this.Left = recordx;
            
this.Top = recordy;
        }

Demo下载

Add your comment

13 条回复

  1. #1楼 老Q      2006-12-21 16:43
    当窗口最大化的时候并不能抖动
    但是msn的可以哦
     回复 引用 查看   
  2. #2楼 航天奇侠2006-12-21 17:11

    第二种没见过。

    还有,以后压缩请用zip格式,通用性要高点。
     回复 引用   
  3. #3楼 利比亚      2006-12-21 23:17
    不错。

    羡慕xia

    我还不会打包呢。。
    汗。

    得多在cnblogs学习啊 啊
     回复 引用 查看   
  4. #4楼[楼主] 农夫三拳      2006-12-22 09:06
    @老Q
    这我倒没注意,呵呵,最大化的时候窃以为是先减小左上角坐标再增大的。
     回复 引用 查看   
  5. #5楼[楼主] 农夫三拳      2006-12-22 09:07
    @航天奇侠
    以后注意,嘿嘿~
     回复 引用 查看   
  6. #6楼[楼主] 农夫三拳      2006-12-22 09:07
    @利比亚
    一起学习~~
     回复 引用 查看   
  7. #7楼 jingang[未注册用户]2007-08-31 11:09
    呵呵!,觉得有意思,不过代码我还是有些不理解,楼主能不能给我源码啊,
    谢啦撤!!@
     回复 引用   
  8. #8楼[楼主] 农夫三拳      2007-09-03 02:07
    @jingang
    代码没了呀,只有你去反编译我的demo了,寒- -
     回复 引用 查看   
  9. #9楼 麒麟[未注册用户]2008-01-11 13:49
    在源代码进行调试的时候
    int x = random.Next(rand);
    int y = random.Next(rand);
    其中的rand是未被声明的变量!
     回复 引用   
  10. #10楼[楼主] 农夫三拳      2008-01-12 00:36
    @麒麟
    我给的只是片段代码
    rand是个常量,我设的是5
     回复 引用 查看   
  11. #11楼 孤单[未注册用户]2008-05-19 12:39
    真的是 了不起啊。呵呵应该多想你学习一点..
     回复 引用   
  12. #12楼 qinghao      2009-02-19 00:00
    原来上cnblog的人也不都是专业的,希望不要搞成CSDN那样,成了个娱乐性的东西了.
     回复 引用 查看   
  13. #13楼 爱天乐舞[未注册用户]2009-04-01 15:17
    我也做过窗体抖动功能,我是用一个Timer控件定时改变窗体位置
    也行 可以试试
     回复 引用