输入坐标和输出坐标——图片框上动态加载按钮及响应事件

         在实际的项目中总会遇到一些需要动态加载一些控件,并且加载控件的响应事件的代码。现在写一个简单的例子,主要说一下里面的一些关键点:

         ①使用鼠标在窗体上的图片框中动态的添加按钮 。动态的去加载事件,肯定是需要使用对象类动态的生成。

         ②动态事件,必须要使用委托去实现。


         环境:Visual Studio 2010, .Net FrameWork 3.5



 private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            Button btn = new Button();
            btn.Size = new System.Drawing.Size(20, 20);
            Point Pointlocation = new Point();
            btn.Location = new Point(e.X, e.Y);
            btn.Location = Pointlocation;
            pictureBox1.Controls.Add(btn);
            btn.Click += new EventHandler(delegate{Message();});
        }
        private void Message()
        {
            MessageBox.Show("动态触发事件");
        }

 知识点一:    输入坐标和输出坐标

         本示例中输入已经将坐标为(e.x,e.y)不需要在做转换,然而很多时候坐标是需要转换的。比如GIS的二次开发中我们会用到屏幕坐标,设备坐标还有逻辑坐标。如下图,先将器关系稍微说明一下。


         如果本示例中要用到设备坐标,使用方法PointToClient(point) 将输入坐标转化。代买则会变成

            Pointlocation = pictureBox1.PointToClient(new Point(e.X, e.Y));
            Pointlocation.X += pictureBox1.Parent.Location.X;
            Pointlocation.Y += pictureBox1.Parent.Location.Y + 32;
            btn.Location = Pointlocation;  
        将坐标转换后还需要加上另pictureBox1.Parent.Location.X(窗体的其实坐标),这样保证了在最小化的时候生成的按钮,在对应的位置。

        另外设备坐标系坐标原点为黄色区域左上角,X轴方向从左到右;Y轴方向从上到下;坐标单位为像素;

        除此之外还有很多坐标系,如屏幕坐标系,世界坐标系等,需要之间进行互相转换的时候可以使用GDI+ 去做转换。


         知识点二:动态添加按钮

         动态添加按钮是使用Button对象类动态的生成,核心代码其实就是下面两句

          Button btn = new Button();
          pictureBox1.Controls.Add(btn);
         初始化类后直接将其添加到相应的容器对象中即可。


         知识点三: 动态事件

         动态事件需要使用委托,很明显这个事件不能再窗体运行的时候去写click事件,所以只能是调用某个方法做作为委托事件,下面的代买为事件委托内容

             btn.Click += new EventHandler(delegate{Message();});
             private void Message()
                 {
                      MessageBox.Show("动态触发事件");
                 }
          根据不同的需求可以写不同的事件。

源码下载地址点击进入下载页面



        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值