C# winform中如何创建类似桌面上的那种图标效果

不规则的图标,可以随意重命名,最好还能拖动... 不规则的图标,可以随意重命名,最好还能拖动 展开
 我来答
帐号已注销
2013-03-16 · TA获得超过2184个赞
知道小有建树答主
回答量:631
采纳率:100%
帮助的人:644万
展开全部

做一个大小合适的图片,存成gif,这样背景透明。

把button的背景设为该图片,borderwidth为0,样式为flat,就可以了。

至于拖动,一般用类,没有一个一个按钮的编写拖动代码。下面是一个拖动类。

C#控件拖动和缩放类

这几天,因为项目需要,要对窗体上的控件进行拖动并对大小进行缩放,于是封装了该类:

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace ItpClientProtype

{

    class DragResizeControl

    {

        #region Field

        private const int Band = 5;

        private const int MinWidth = 10;

        private const int MinHeight = 10;

        private static EnumMousePointPosition m_MousePointPosition;

        private static Point p, p1;

        #endregion

        #region Inner Object

        private enum EnumMousePointPosition

        {

            MouseSizeNone = 0, //'无     

            MouseSizeRight = 1, //'拉伸右边框     

            MouseSizeLeft = 2, //'拉伸左边框     

            MouseSizeBottom = 3, //'拉伸下边框     

            MouseSizeTop = 4, //'拉伸上边框     

            MouseSizeTopLeft = 5, //'拉伸左上角     

            MouseSizeTopRight = 6, //'拉伸右上角     

            MouseSizeBottomLeft = 7, //'拉伸左下角     

            MouseSizeBottomRight = 8, //'拉伸右下角     

            MouseDrag = 9   // '鼠标拖动   

        }

        #endregion

        #region Constructor

        public DragResizeControl()

        {

            // Nothing to do.

        }

        #endregion

        #region Public Method

        public static void RegisterControl(Control control)

        {

            if (control != null)

            {

                control.MouseDown += new MouseEventHandler(control_MouseDown);

                control.MouseLeave += new EventHandler(control_MouseLeave);

                control.MouseMove += new MouseEventHandler(control_MouseMove);

            }

        }

           public static void UnRegisterControl(Control control)

         {

            if (control != null)

            {

                control.MouseDown -= new MouseEventHandler(control_MouseDown);

                control.MouseLeave -= new EventHandler(control_MouseLeave);

                control.MouseMove -= new MouseEventHandler(control_MouseMove);

            }

        }

        #endregion

        private static void control_MouseDown(object sender, MouseEventArgs e)

        {

            p.X = e.X;

            p.Y = e.Y;

            p1.X = e.X;

            p1.Y = e.Y;

        }

        private static void control_MouseLeave(object sender, EventArgs e)

        {

            m_MousePointPosition = EnumMousePointPosition.MouseSizeNone;

            Control control = sender as Control;

            control.Cursor = Cursors.Arrow;

        }

        private static void control_MouseMove(object sender, MouseEventArgs e)

        {

            Control lCtrl = (sender as Control);

            if (e.Button == MouseButtons.Left)

            {

                switch (m_MousePointPosition)

                {

                    case EnumMousePointPosition.MouseDrag:

                        lCtrl.Left = lCtrl.Left + e.X - p.X;

                        lCtrl.Top = lCtrl.Top + e.Y - p.Y;

                        break;

                    case EnumMousePointPosition.MouseSizeBottom:

                        lCtrl.Height = lCtrl.Height + e.Y - p1.Y;

                        p1.X = e.X;

                        p1.Y = e.Y; //'记录光标拖动的当前点     

                        break;

                    case EnumMousePointPosition.MouseSizeBottomRight:

                        lCtrl.Width = lCtrl.Width + e.X - p1.X;

                        lCtrl.Height = lCtrl.Height + e.Y - p1.Y;

                        p1.X = e.X;

                        p1.Y = e.Y; //'记录光标拖动的当前点       

                        break;

                    case EnumMousePointPosition.MouseSizeRight:

                        lCtrl.Width = lCtrl.Width + e.X - p1.X;        //       

                        lCtrl.Height = lCtrl.Height + e.Y - p1.Y;

                        p1.X = e.X;

                        p1.Y = e.Y; //'记录光标拖动的当前点       

                        break;

                    case EnumMousePointPosition.MouseSizeTop:

                        lCtrl.Top = lCtrl.Top + (e.Y - p.Y);

                        lCtrl.Height = lCtrl.Height - (e.Y - p.Y);

                        break;

                    case EnumMousePointPosition.MouseSizeLeft:

                        lCtrl.Left = lCtrl.Left + e.X - p.X;

                        lCtrl.Width = lCtrl.Width - (e.X - p.X);

                        break;

                    case EnumMousePointPosition.MouseSizeBottomLeft:

                        lCtrl.Left = lCtrl.Left + e.X - p.X;

                        lCtrl.Width = lCtrl.Width - (e.X - p.X);

                        lCtrl.Height = lCtrl.Height + e.Y - p1.Y;

                        p1.X = e.X;

                        p1.Y = e.Y; //'记录光标拖动的当前点     

                        break;

                    case EnumMousePointPosition.MouseSizeTopRight:

                        lCtrl.Top = lCtrl.Top + (e.Y - p.Y);

                        lCtrl.Width = lCtrl.Width + (e.X - p1.X);

                        lCtrl.Height = lCtrl.Height - (e.Y - p.Y);

                        p1.X = e.X;

                        p1.Y = e.Y; //'记录光标拖动的当前点       

                        break;

                    case EnumMousePointPosition.MouseSizeTopLeft:

                        lCtrl.Left = lCtrl.Left + e.X - p.X;

                        lCtrl.Top = lCtrl.Top + (e.Y - p.Y);

                        lCtrl.Width = lCtrl.Width - (e.X - p.X);

                        lCtrl.Height = lCtrl.Height - (e.Y - p.Y);

                        break;

                    default:

                        break;

                }

                if (lCtrl.Width < MinWidth) lCtrl.Width = MinWidth;

                if (lCtrl.Height < MinHeight) lCtrl.Height = MinHeight;

            }

            else

            {

                m_MousePointPosition = MousePointPosition(lCtrl.Size, e);   //'判断光标的位置状态   

                Control control = sender as Control;

                switch (m_MousePointPosition)   //'改变光标     

                {

                    case EnumMousePointPosition.MouseSizeNone:

                        control.Cursor = Cursors.Arrow;

                        //'箭头       

                        break;

                    case EnumMousePointPosition.MouseDrag:

                        control.Cursor = Cursors.SizeAll;      //'四方向     

                        break;

                    case EnumMousePointPosition.MouseSizeBottom:

                        control.Cursor = Cursors.SizeNS;       //'南北   

                        break;

                    case EnumMousePointPosition.MouseSizeTop:

                        control.Cursor = Cursors.SizeNS;       //'南北     

                        break;

                    case EnumMousePointPosition.MouseSizeLeft:

                        control.Cursor = Cursors.SizeWE;       //'东西   

                        break;

                    case EnumMousePointPosition.MouseSizeRight:

                        control.Cursor = Cursors.SizeWE;       //'东西         

                        break;

                    case EnumMousePointPosition.MouseSizeBottomLeft:

                        control.Cursor = Cursors.SizeNESW;     //'东北到南西       

                        break;

                    case EnumMousePointPosition.MouseSizeBottomRight:

                        control.Cursor = Cursors.SizeNWSE;     //'东南到西北       

                        break;

                    case EnumMousePointPosition.MouseSizeTopLeft:

                        control.Cursor = Cursors.SizeNWSE;     //'东南到西北     

                        break;

                    case EnumMousePointPosition.MouseSizeTopRight:

                        control.Cursor = Cursors.SizeNESW;     //'东北到南西       

                        break;

                    default:

                        break;

                }

            }

        }

        private static EnumMousePointPosition MousePointPosition(Size size, System.Windows.Forms.MouseEventArgs e)

        {

            if ((e.X >= -1 * Band) | (e.X <= size.Width) | (e.Y >= -1 * Band) | (e.Y <= size.Height))

            {

                if (e.X < Band)

                {

                    if (e.Y < Band)

                    {

                        return EnumMousePointPosition.MouseSizeTopLeft;

                    }

                    else

                    {

                        if (e.Y > -1 * Band + size.Height)

                        {

                            return EnumMousePointPosition.MouseSizeBottomLeft;

                        }

                        else

                        {

                            return EnumMousePointPosition.MouseSizeLeft;

                        }

                    }

                }

                else

                {

                    if (e.X > -1 * Band + size.Width)

                    {

                        if (e.Y < Band)

                        {

                            return EnumMousePointPosition.MouseSizeTopRight;

                        }

                        else

                        {

                            if (e.Y > -1 * Band + size.Height)

                            {

                                return EnumMousePointPosition.MouseSizeBottomRight;

                            }

                            else

                            {

                                return EnumMousePointPosition.MouseSizeRight;

                            }

                        }

                    }

                    else

                    {

                        if (e.Y < Band)

                        {

                            return EnumMousePointPosition.MouseSizeTop;

                        }

                        else

                        {

                            if (e.Y > -1 * Band + size.Height)

                            {

                                return EnumMousePointPosition.MouseSizeBottom;

                            }

                            else

                            {

                                return EnumMousePointPosition.MouseDrag;

                            }

                        }

                    }

                }

            }

            else

            {

                return EnumMousePointPosition.MouseSizeNone;

            }

        }

    }

}

具体的调用方式如:

DragResizeControl.BindControl(this.button1);

就像普通的Windows Forms应用中注册控件的事件代码一样,只要绑定了控件后,就可以很方便地实现对控件的拖动与缩放了。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式