天天看點

C#模拟QQ窗體抖動

窗體抖動是件很有意思的事情,就讓我們看看一起來看看它的原理吧。

其實是生成随機數,然後改變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;

        }

繼續閱讀