浅谈关于编译窗口移动

来源:互联网 发布:西班牙经济现状知乎 编辑:程序博客网 时间:2024/06/07 06:16

           这几天的编译那个关于抽奖的小程序一直都是很顺利的,知道面临了现在所遇到的问题,那就是关于如何实现窗口的移动。我认为一个应用当我们使用它时所发生的变化应该是连续性的,因此当我面临编译窗口移动的代码时这个问题始终的困扰着我,因为窗口的移动是不可控的。使用者可能将窗口移动到任意的地方,这一个如何控制,这些问题始终围绕着我,知道我看了教学视频之后,才有所了解。

        首先要说的是,微软在程序使用方面一直提倡的是所见即所得,我发现在程序编辑方便也是如此。首先在实现我们的窗口移动时,我们会发现我们的第一个动作就是在窗口的边缘处按下鼠标,代码如下

private void Form1_MouseDown(object  sender ,MOuseEventargs e)
这串代码的含义就是你所按下的鼠标,实际上这串代码是提取你的当前的鼠标在屏幕的坐标值。当然要提醒的是这串代码未定义坐标,因此还不能达到提取坐标值的目的。完整的代码应该是
int x, y;        private void Form1_MouseDown(object sender, MouseEventArgs e)        {            x = e.X;            y = e.Y;        }
此段代码的含义是首先定义x,y即是在二维平面的一个坐标,然后在大括号中分别写入x,y。初学者肯定会对这条代码中有些词语产生疑问,例如e是什么,MouseEventargs是什么等等。事实上我查了一些资料发现vs编译器是非常的智能,e就是MouseEventargs类的对象,它就是为鼠标将会产生的各种事件提供数据。就像在这个例子中e为MouseDown提供了坐标的数据,因此使得我们的编程非常的方便。

        至此我们已经有了鼠标在点击窗口时最初的坐标数据,接下来我们所要做的就是如何获取当鼠标拖动窗口停止时最终的数据。在这里我们同样要使用到关于Mouse的组件,那就是MouseMove。代码如下

private void Form1_MouseMove(object sender, MouseEventArgs e)

可以看出这行代码与前面的代码只有一次之差,那就是将Down改为了Move,在接下来的代码中我们就将看vs编译器的有趣与智能之处。

 {            if (e.Button == MouseButtons.Left)            {//移动                int offSetX = e.X - x;                int offSetY = e.Y - y;                this.Location = new Point(this.Location.X + offSetX ,this. Location.Y + offSetY);            }        }
很明显这串代码首先鼠标按下的键进行了指定,指定的是鼠标的左键,接着是添加了一行注释用以表明接下代码所表述的是对于窗体移动所设计的算法,这个算法的精妙之处是将窗体移动轨迹简化为鼠标移动的轨迹,因此我们只要知道鼠标移动就可知窗口移动,因此这个算法是非常方便的。

         鉴于时间关系这一次就先写到这里了,其实这段代码若进行了编译会有更多的发现,对于我们初学者来说这段代码里还有许多可以学的,仔细看看会有更多的惊喜。












原创粉丝点击