| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 624 人关注过本帖
标题:C#动态生成控件的随意拖动和缩放如何实现?急求啊,老师催的很急,谢谢
只看楼主 加入收藏
小年
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-11-21
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:2 
C#动态生成控件的随意拖动和缩放如何实现?急求啊,老师催的很急,谢谢
大家好,我在界面上动态生成一些控件,要求这些控件出现后可以随意拖动和缩放,我现在只能实现对已经规定好的控件实现拖动,对于动态生成的就不行了?不知道怎么做?谢谢大家知道啦
我的代码如下:
private void button2_MouseDown(object sender, MouseEventArgs e)
        {
            //记录鼠标按下时。鼠标在控件Button里面的位置
            //因为要偏移,所以必须取负值
            p.X = -e.X;
            p.Y = -e.Y;
 private void button2_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {//-------判断是否左键按下
                Point MouseP = Control.MousePosition;       //获取鼠标光标在屏幕的位置
                MouseP.Offset(p.X, p.Y);        //偏移,以确定拖动点,为鼠标Down时的位置
                ((Control)sender).Location = ((Control)sender).Parent.PointToClient(MouseP);    //将指定屏幕点的位置计算成工作区坐标
            }

        },这个对动态生成的控件没有效果,求指导
搜索更多相关主题的帖子: void private 动态 如何 
2012-11-28 17:37
mmxo
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:189
专家分:1090
注 册:2012-11-7
收藏
得分:10 
给你一个简单的,自定义控件ACircle,可拖动,鼠标滚轮缩放,由于是控件自身实现,所以只需在主程序中动态生成并添加进窗体就可以了,还有一种手柄式缩放的稍复杂就不弄了,你先应付老师吧,呵呵!
如果不是自定义控件,那么你在动态生成时指定事件处理程序就可以了,如:button.MouseMove+=butMouseMove;

程序代码:
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace RandomCircle
{
    public sealed partial class ACircle : Control
    {
        #region 只读全局字段

        private readonly Brush _brush;

        #endregion

        #region 全局字段

        private bool    _isMouseDown;
        private Point   _mousePoint;
        private int     _scaleAmount;

        #endregion

        #region 构造函数

        public ACircle()
        {
            InitializeComponent();
            _brush = new SolidBrush(ForeColor);
            ScaleAmount = 2;
            Draw();
            MouseDown  += ACircle_MouseDown;
            MouseMove  += ACircle_MouseMove;
            MouseUp    += ACircle_MouseUp;
            MouseWheel += ACircle_MouseWheel;
        }

        #endregion

        #region 公共属性

        public int ScaleAmount 
        { 
            get { return _scaleAmount; }
            set { _scaleAmount = value <= 0 ? 2 : value % 2 == 1 ? value + 1 : value; }
        }

        #endregion

        #region 控件事件

        void ACircle_MouseDown(object sender, MouseEventArgs e)
        {
            _isMouseDown = true;
            _mousePoint = new Point(-e.X, -e.Y);
        }

        void ACircle_MouseMove(object sender, MouseEventArgs e)
        {
            if (!_isMouseDown) return;
            var mp = MousePosition;
            mp.Offset(_mousePoint);
            Location = Parent.PointToClient(mp);
        }

        void ACircle_MouseUp(object sender, MouseEventArgs e)
        {
            _isMouseDown = false;
        }

        void ACircle_MouseWheel(object sender, MouseEventArgs e)
        {
            var vOffset = e.Delta > 0 ? ScaleAmount : -ScaleAmount;
            Width      += vOffset;
            Height     += vOffset;
            Left       -= vOffset / 2;
            Top        -= vOffset / 2;
            Draw();
        }

        #endregion

        #region 重写方法

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
            Draw();
        }

        #endregion

        #region 私有方法

        private void Draw()
        {
            var g = CreateGraphics();
            g.Clear(BackColor);
            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.InterpolationMode = InterpolationMode.NearestNeighbor;
            g.FillEllipse(_brush, ClientRectangle);
        }
        
        #endregion
    }
}


[ 本帖最后由 mmxo 于 2012-11-28 20:57 编辑 ]

为提高中华编程水平而奋斗
2012-11-28 20:33
z_kxin
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-2-9
收藏
得分:0 
回复 2楼 mmxo
大佬 麻烦问一下 这个自定义控件的缩放功能是根据鼠标当前位置进行锚点缩放还是以控件中心缩放的呢
2021-02-09 11:23
快速回复:C#动态生成控件的随意拖动和缩放如何实现?急求啊,老师催的很急,谢谢 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027545 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved