如何制作类似于触摸屏的主窗体C#

时间:2018-08-20 03:32:38

标签: c# bunifu

我想使我的主窗体像智能手机触摸屏一样可拖动。

因此,我在其中放置了一个Bunifugradientpanel并将其停靠在主窗体中。还放置了bunifudragcontrol并将targetcontrol属性设置为'bunifugradientpanel',并将vertical属性设置为'false',还将固定属性设置为'false'。但是,每当我在朗姆酒时段将面板拖动到右侧时,就会显示主窗体的一部分,即图片中的白色部分。

here's what's happening when i drag him to the right.

屏幕的白色部分是主要形式。我想要的是如果主窗体上的bunifugradientpanel位置=(x = 0,y = 0),则停止拖动活动,因此不会出现该主窗体的部分。谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

BunifuGradientPanel是第三方控件,这就是为什么它会出现绘图和闪烁问题的原因,我的建议是您使用常见的Panel System.Windows.Forms.Panel

也就是说,我为您创建了此代码,使控件在按下鼠标按钮时只能从右向左和从左向右拖动:

using System;
using System.Windows.Forms;

namespace JeremyHelp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.SetStyle(
            ControlStyles.AllPaintingInWmPaint |
            ControlStyles.UserPaint |
            ControlStyles.DoubleBuffer,
            true);
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            this.SetDraggable(this.bunifuGradientPanel1, vertical: false);
        }

        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams handleParam = base.CreateParams;
                handleParam.ExStyle |= 0x02000000;   // WS_EX_COMPOSITED       
                return handleParam;
            }
        }

        private void SetDraggable(Control target, bool horizontal = true, bool vertical = true)
        {
            bool IsDraggable = false;
            int
            X = 0, Y = 0,
            A = 0, B = 0;

            target.MouseUp += (s, e) =>
            {
                IsDraggable = false;
                X = 0; Y = 0;
                A = 0; B = 0;
            };

            target.MouseDown += (s, e) =>
            {
                IsDraggable = true;
                A = Control.MousePosition.X - target.Left;
                B = Control.MousePosition.Y - target.Top;
            };

            target.MouseMove += (s, e) =>
            {
                X = Control.MousePosition.X;
                Y = Control.MousePosition.Y;

                if (IsDraggable)
                {
                    if (horizontal) target.Left = X - A;
                    if (vertical) target.Top = Y - B;
                }
            };
        }
    }
}